依赖注入的懒惰分辨率(Lazy resolution of dependency injection

2019-08-05 04:54发布

我已经.NET我使用统一为国际奥委会类解决我们的依赖。 它试图在一开始加载所有的依赖关系。 是否有统一的方式(设定),允许加载在运行时的依赖?

Answer 1:

甚至还有更好的解决方案 - 在Unity 2.0懒惰<T>和IEnumerable <懒惰<T >>原生支持。 检查它在这里 。



Answer 2:

我曾经在博客中的一些代码在这里 ,让路过“懒惰”依赖到你的类。 它可以让你更换:

class MyClass(IDependency dependency)

class MyClass(ILazy<IDependency> lazyDependency)

这使您可以延迟实际创作的依赖,直到你需要使用它的选项。 呼叫lazyDependency.Resolve()当你需要它。

下面是ILazy的实现:

public interface ILazy<T>
{
    T Resolve();
    T Resolve(string namedInstance);
}

public class Lazy<T> : ILazy<T>
{
    IUnityContainer container;

    public Lazy(IUnityContainer container)
    {
        this.container = container;
    }

    public T Resolve()
    {
        return container.Resolve<T>();
    }

    public T Resolve(string namedInstance)
    {
        return container.Resolve<T>(namedInstance);
    }
}

你需要在你的容器进行注册,以便能够使用它:

container.RegisterType(typeof(ILazy<>),typeof(Lazy<>));


Answer 3:

统一应该是懒洋洋地构造的情况下,我相信。 你的意思是它加载含有其他依赖的组件? 如果是这样的话,你可能想看看MEF -它是专门为模块化的应用。



文章来源: Lazy resolution of dependency injection