gpt4 book ai didi

c# - 在框架中使用 Funcs 而不是实例

转载 作者:太空狗 更新时间:2023-10-30 00:08:53 27 4
gpt4 key购买 nike

在查看几个项目的源代码时,我发现了一个我不太理解的模式。例如在 FubuMVCCommon Service Locator Func 在静态提供程序更改时使用。任何人都可以解释使用的好处是什么:

private static Func<IServiceLocator> currentProvider;
public static IServiceLocator Current
{
get { return currentProvider(); }
}

public static void SetLocatorProvider(Func<IServiceLocator> newProvider)
{
currentProvider = newProvider;
}

代替:

private static IServiceLocator current;
public static IServiceLocator Current
{
get { return current; }
}

public static void SetLocator(IServiceLocator newInstance)
{
current = newInstance;
}

最佳答案

第一个模型相对于第二个模型的主要优势是所谓的“惰性初始化”。在第二个示例中,一旦调用 SetLocator,您就必须在内存中加载一个 IServiceLocator 实例并准备就绪。如果此类实例的创建成本很高,和/或一次与一堆其他对象一起创建(例如在应用程序启动时),则最好尝试延迟对象的实际创建以减少用户明显的延迟。此外,如果依赖项可能不会被依赖类使用(比如它只在某些操作中需要,并且该类可以做其他不需要依赖项的事情),那么实例化一个依赖项将是一种浪费。

解决方案是提供“工厂方法”而不是实际实例。当实际需要实例时,调用工厂方法,并在实例被使用前的最后可能时刻创建实例。这减少了前端加载时间并避免创建不需要的依赖项。

关于c# - 在框架中使用 Funcs 而不是实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com