告诉StructureMap使用另一个构造函数

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)


PHe*_*erg 5

约书亚的答案涵盖了所有方面.作为旁注,为了配置Structuremap以选择特定的构造函数而不将参数硬编码到构造函数中,如Joshua的示例所示,您可以使用SelectContructor方法:

x.SelectConstructor<MyService>(() => new MyService());
Run Code Online (Sandbox Code Playgroud)

SelectConstructor方法调用中的lambda应该调用所需的构造函数(为所有存在的参数放置空值或任何正确类型的值).有关详细信息,请参阅文档.