Gid*_*sey 7 .net structuremap dependency-injection ioc-container
我是StructureMap的新手,并且我正在使用一些使用StructureMap 2.5.4的现有代码.
有一个使用StructureMap构造的类,它有一个构造函数IEnumerable<ICar>作为参数.
注册表具有以下代码.
Scan(x =>
{
x.TheCallingAssembly();
x.WithDefaultConventions();
x.AddAllTypesOf<ICar>();
}
);
ForRequestedType<IEnumerable<ICar>>().TheDefault.Is.ConstructedBy(
x => ObjectFactory.GetAllInstances<ICar>());
Run Code Online (Sandbox Code Playgroud)
我正在编写一个单元测试,并从ObjectFactory获取了一个嵌套容器,并使用Inject方法注入了一个实例.ICar的一个实例应该在其构造函数中接收注入类型.但它没有工作,我跟踪到了不使用我的嵌套容器的ObjectFactory.GetAllInstances()调用.
我怎样才能让它发挥作用?
我还读到了关于StructureMap自动装配数组和IEnumerable实例,但我无法让它工作.
有没有更好的方法来重写上面的注册表代码,以便IEnumerable<ICar>创建一个实例并使用我嵌套容器中的注入类型?
如果要将实例注入嵌套容器,则需要从嵌套容器中检索该实例.静态ObjectFactory有自己的容器,可能是你的情况下的"父"容器.父容器不会从嵌套容器继承实例.
您不需要进行任何特定的注册就可以将所有实例注入到IEnumerable在其构造函数中接受的类中.StructureMap将自动执行此操作.如果在容器中注册了3个ICar实例,并从该容器请求Foo实例,其中Foo具有IEnumerable<ICar>构造函数参数,则将创建Foo,注入3个ICar实例.
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |