多重构造与Structuremap变化范围有多大?
-
22-09-2019 - |
题
要说明的问题,这是我的设置的简化版本。 我有一个工厂像这样的:
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();
}
我设置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>();
这是行不通的:缺少请求实例属性的“i”为InstanceKey
如果我这样做:
x.For<IFactory>().Use(new Factory());
它的工作原理,但输出仅仅是一个“参”,也就是说它不是建立一个新的实例每次调用。它使用这个特定的实例我通过在
我发现的唯一的方法是添加在我的参数构造的顶部的[预设构造函数],使用标准x.For()使用(); 但我不希望添加这个属性和传播配置翻过我的模型。
帮助?
解决方案
SelectConstructor采用具体类型,而不是接口。当然,接口可是没有任何构造函数。 但没有什么突破,它只是忽略了....所以我不能发现这个错误。
x.SelectConstructor<IFactory>(() => new Factory());
x.For<IFactory>().Use<Factory>();
应
x.SelectConstructor<**Factory**>(() => new Factory());
x.For<IFactory>().Use<Factory>();
不隶属于 StackOverflow