摘要:
在项目中常常会遇到多个组件都实现了同一个契约接口,那么在DI容器中怎么获取实现同一个契约接口的所有组件呢。答案是:IEnumerable<TContract> componets = ServiceLocator.GetAll<TContract>(); 上面的实现方案是目前主流的DI容器的解决方法。但是这种方法是通过服务定位器把资源拉过来的,而不是通过注入的方式推过来的,不符合DI注入传统设计规范。那么怎么能够更优雅的解决此类问题呢,MEF率先提供了一种方案ImportMany的方式来进行注入多个组件,当然MIni容器也不甘落后也很快就赶上了。下面看看Mini容器的例 阅读全文
摘要:
Lazy注入指的是在注入的成员变量或构造函数参数变量或函数参数变量的类型上包裹一个Lazy类型,该注入方式是借鉴了MEF思想。具体代码: [TestFixture] public class LazyInjectionTest:TestBase { [Contract] interface ISimpleContract { } class SimpleComponent : ISimpleContract { } class HostComponent { [Inject] public Lazy<ISimpleContract> contract; } [Test] publi 阅读全文
摘要:
Mini容器的插件注入是通过InjectMany的方式来注入多个组件的方式进行的,插件的元数据通过标签的方式进行配置,Mini容器在注入插件的过程中同时也可以把插件的元数据一起注入,这和MEF实现插件框架是一样的。 下面看看Mini容器怎样来实现插件架构的。 1. 定义插件接口契约,插件元数据标签以及插件元数据接口 //插件接口 [Contract] public interface IAddIn { void Start();//启动插件 } //插件配置元数据标签 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]. 阅读全文