c# – Unity Factory Injection
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Unity Factory Injection,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1493字,纯文字阅读大概需要3分钟。
内容图文
![c# – Unity Factory Injection](/upload/InfoBanner/zyjiaocheng/785/c9233187f7aa4c628e185d910bf6e093.jpg)
我有一个类似下面的界面,我注入到统一容器中.
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可以做类似的事吗?
解决方法:
有a port of the Castle Windsor Typed Factory Facilities for Unity.它将生成您的界面的实现并为您执行ResolveAll.
您的引导代码应如下所示:
container.RegisterType<IMyInstance,MyInstance1>("1");
container.RegisterType<IMyInstance,MyInstance2>("2");
container.RegisterType<IMyInstance,MyInstance3>("3");
container.RegisterType<IMyInstanceFactory>(new TypedFactory());
对GetAll的调用将被转换为容器调用ResolveAll.
该端口遵循与Windsor相同的约定.
内容总结
以上是互联网集市为您收集整理的c# – Unity Factory Injection全部内容,希望文章能够帮你解决c# – Unity Factory Injection所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。