Gau*_*ain 9 structuremap dependency-injection inversion-of-control
我有一个有2个构造函数的类.
我的课()
和
MyClass(IMyService服务)
我怎么告诉StructureMap然后每当我做一个'new MyClass()'时它应该实际调用第二个构造函数而不是第一个构造函数.
请帮忙.
Jos*_*gan 22
如果你打电话new MyClass()
,那么根本不涉及StructureMap.没有任何StructureMap配置会改变行为.
如果调用ObjectFactory.GetInstance<MyClass>()
,StructureMap将默认使用更多参数调用构造函数.
如果希望StructureMap使用不同的构造函数,可以指定构造函数(通过PHeiberg的答案):
x.SelectConstructor<IMyClass>(() => new MyClass(null));
Run Code Online (Sandbox Code Playgroud)
或者你可以告诉StructureMap如何使用Use()
接受的重载来创建实例Func<>
:
x.For<IMyClass>().Use(ctx => new MyClass(ctx.GetInstance<IMyService>()))
Run Code Online (Sandbox Code Playgroud)
约书亚的答案涵盖了所有方面.作为旁注,为了配置Structuremap以选择特定的构造函数而不将参数硬编码到构造函数中,如Joshua的示例所示,您可以使用SelectContructor方法:
x.SelectConstructor<MyService>(() => new MyService());
Run Code Online (Sandbox Code Playgroud)
SelectConstructor方法调用中的lambda应该调用所需的构造函数(为所有存在的参数放置空值或任何正确类型的值).有关详细信息,请参阅文档.
归档时间: |
|
查看次数: |
6176 次 |
最近记录: |