gpt4 book ai didi

.net - 使用 Structuremap 更改范围的多个构造函数?

转载 作者:行者123 更新时间:2023-12-04 23:10:19 25 4
gpt4 key购买 nike

为了说明问题,这是我的设置的简化版本。
我有一个像这样的工厂:

public interface IFactory{ }

public class Factory : IFactory
{
public Factory()
{
Console.WriteLine("parameterless");
}

//public Factory(int i)
//{
// Console.WriteLine("with parameter : {0}", i);
//}

}

测试这个的程序是一个consoleApp。足以证明我的观点。
static void Main(string[] args)
{
Init();
var factory1 = ObjectFactory.GetInstance<IFactory>();
var factory2 = ObjectFactory.GetInstance<IFactory>();
var factory3 = ObjectFactory.GetInstance<IFactory>();
Console.Read();
}

我在我的 Init 静态方法中设置了 strucutreMap。
  public static void Init()
{
ObjectFactory.Initialize(x =>
{
//insert Initialization code here.
});
}

如果我只有一个构造函数并像这样设置 StructureMap :
x.For<IFactory>().Use<Factory>();

效果很好,输出显示
无参数
无参数
无参数

每个调用都会构建一个新实例。

现在,如果我取消注释第二个构造函数,但我想使用无参数的构造函数,并且具有相同的默认生活方式。我该怎么办?

我试过了:
x.SelectConstructor<IFactory>(() => new Factory());
x.For<IFactory>().Use<Factory>();

它只是不起作用:InstanceKey 缺少请求的实例属性“i”

如果我喜欢这样:
 x.For<IFactory>().Use(new Factory());

它可以工作,但输出只是一个“无参数”,这意味着它不会为每个调用构建一个新实例。它正在使用我传入的这个特定实例。

我发现的唯一方法是在我的无参数构造函数顶部添加 [DefaultConstructor] 并使用标准 x.For().Use();
但我不想添加此属性并将配置分布在我的模型中。

帮助?

最佳答案

SelectConstructor 采用具体类型,而不是接口(interface)。当然,接口(interface)没有任何构造函数。
但是没有任何问题,它只是被忽略了......所以我无法发现那个错误。

 x.SelectConstructor<IFactory>(() => new Factory());
x.For<IFactory>().Use<Factory>();

应该
 x.SelectConstructor<**Factory**>(() => new Factory());
x.For<IFactory>().Use<Factory>();

关于.net - 使用 Structuremap 更改范围的多个构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326081/

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