我有一个如下面的界面,我注入到统一容器中。Unity Factory Injection
public interface IMyInstanceFactory
{
IEnumerable<IMyInstance> GetAll();
}
所有IMyInstance
运行时即他们可以引导程序中进行设置之前是已知的,可以从统一检索。我对IMyInstanceFactory
具体实现如下:
public class MyInstanceFactory:IMyInstanceFactory
{
IUnityContainer _container;
public MyInstanceFactory(IUnityContainer container)
{
_container = container;
}
public IEnumerable<IMyInstance> GetAll()
{
return _container.ResolveAll<IMyInstance>();
}
}
..和我的引导程序我做这样的事情:
container.RegisterType<IMyInstance,MyInstance1>;
container.RegisterType<IMyInstance,MyInstance2>;
container.RegisterType<IMyInstance,MyInstance3>;
container.RegisterType<IMyInstanceFactory,MyInstanceFactory>;
这解决一切美丽。然而,我不想依赖容器本身或者仅仅为此实现IMyInstanceFactory
,有没有一种方法可以在不实施IMyInstanceFactory
的情况下进行设置? Unity是否为此提供了一个设施?
这种东西..
container.RegisterType<IMyInstanceFactory,factory=>factory.GetAll()>().IsResolvedBy(unity.ResolveAll<IMyInstance>);
我知道城堡能做到这一点,可以统一做同样的事情?
如果这真的是你所有的工厂,为什么不直接使用统一容器呢?或者如果你不想让你的代码依赖于Unity,你可以使用IServiceLocator。 – cadrell0
请不要使用ServiceLocator。在现代应用程序体系结构中这是[被认为是反模式](http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx)。 –