我已经.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