Mini 容器学习笔记12——组合实例
在项目中常常会遇到多个组件都实现了同一个契约接口,那么在DI容器中怎么获取实现同一个契约接口的所有组件呢。 答案是:
IEnumerable<TContract> componets = ServiceLocator.GetAll<TContract>();
上面的实现方案是目前主流的DI容器的解决方法。但是这种方法是通过服务定位器把资源拉过来的,而不是通过注入的方式推过来的,不符合DI注入传统设计规范。
那么怎么能够更优雅的解决此类问题呢,MEF率先提供了一种方案ImportMany的方式来进行注入多个组件,当然MIni容器也不甘落后也很快就赶上了。下面看看Mini容器的例子。
1. 定义契约接口
[Contract]
public interface ISimpleContract
{
}
2. 实现该契约接口的多个组件
public class SimpleComponent : ISimpleContract
{
}
public class SimpleComponentTwo:ISimpleContract
{
}
3. 创建宿主程序并测试
[TestFixture]
public class ManyComponentTest:TestBase
{
[InjectMany]
ISimpleContract[] array;
[Test]
public void Test()
{
ServiceRegistry
.Register<SimpleComponent>()
.Register<SimpleComponentTwo>()
.Compose(this);
Assert.IsNotNull(array);
Assert.IsTrue(array.Count() == 2);
}
}
Mini 容器官方网站:
推荐资源:

浙公网安备 33010602011771号