gpt4 book ai didi

.net - 如何告诉 StructureMap 3 为特定类型使用特定的构造函数?

转载 作者:行者123 更新时间:2023-12-04 02:22:44 26 4
gpt4 key购买 nike

我在我的 Web API 项目中使用 StructureMap(版本 3.1.4.143)进行一般依赖项解析,目前为止运行良好。我希望 structuremap 遵循它的默认行为,即选择具有最多参数的构造函数。但是,对于特定的类型,我想使用特定的构造函数来使用。

例如我有一些服务契约(Contract)

public interface IService 
{
void DoSomething();
}

和类似的实现

public class Service : IService 
{
public Service() { //something }
public Service(IRepo repo, ILogger logger) { //something }
//rest of the logic
}

仅对于此类型,我想使用无参数构造函数。我如何在 StructureMap 3 中做到这一点? (我可以通过创建 IConstructorSelector 的实例并将其应用为如下策略来对所有类型执行此操作)

x.Policies.ConstructorSelector<ParamLessConstructorSelector>();

最佳答案

回答我自己的问题:

这是在 StructureMap 3 中执行此操作的正确方法。使用 SelectConstructor,structuremap 从给定表达式推断构造函数。

x.ForConcreteType<Service>().Configure.SelectConstructor(() => new Service());

或者,可以用For-Use-mapping指定。

x.For<IService>().Use<Service>().SelectConstructor(() => new Service());

查看 Github StructureMap 中的文档 docs .

如果此规则需要在整个应用程序中应用,则可以通过创建 IConstructorSelector 实例将规则作为策略应用

public class ParamLessConstructorSelector : IConstructorSelector
{
public ConstructorInfo Find(Type pluggedType)
{
return pluggedType.GetConstructors().First(x => x.GetParameters().Count() == 0);
}
}

并配置容器。

x.Policies.ConstructorSelector<ParamLessConstructorSelector>();

关于.net - 如何告诉 StructureMap 3 为特定类型使用特定的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com