我有一个类似下面的接口,我将其注入到Unity容器中。
public interface IMyInstanceFactory
{
IEnumerable<IMyInstance> GetAll();
}
所有的IMyInstance
在运行时之前都已知,即它们可以在引导程序中设置,并且可以从Unity中检索。我对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>);
我知道Castle可以做到这一点,Unity能否做类似的事情?