C# 构造函数链接和静态属性参数以及StructureMap
我希望我的构造函数调用另一个带参数的构造函数,但当我这样做时(MyProperty),MyProperty必须是静态的。问题是在这个静态属性的getter中,我必须从structuremap容器中获取ISettingReader的实例,因为它是静态的,我的容器只包含两个元素,而不是超过50个元素,所以它找不到实例。(ISettingReader上的pluginFamily错误) 这是我的密码C# 构造函数链接和静态属性参数以及StructureMap,c#,constructor,structuremap,C#,Constructor,Structuremap,我希望我的构造函数调用另一个带参数的构造函数,但当我这样做时(MyProperty),MyProperty必须是静态的。问题是在这个静态属性的getter中,我必须从structuremap容器中获取ISettingReader的实例,因为它是静态的,我的容器只包含两个元素,而不是超过50个元素,所以它找不到实例。(ISettingReader上的pluginFamily错误) 这是我的密码 private static Func<LinqDataContext> _cont
private static Func<LinqDataContext> _contextFactory;
public static Func<LinqDataContext> DefaultContextFactory
{
get
{
var settingReader = ObjectFactory.GetInstance<ISettingReader>(); // I get an error saying it can't find ISettingReader()
var connectionString = settingReader.GetSetting("MyProject.ConnectionString");
_contextFactory = () => new LinqDataContext(connectionString);
return _contextFactory;
}
}
public MyProjectViewModelService() : this(DefaultContextFactory)
{
}
public MyProjectViewModelService(Func<LinqDataContext> contextFactory)
{
_contextFactory = contextFactory;
}
private static Func\u contextFactory;
公共静态函数DefaultContextFactory
{
得到
{
var settingReader=ObjectFactory.GetInstance();//我收到一个错误,说它找不到ISettingReader()
var connectionString=settingReader.GetSetting(“MyProject.connectionString”);
_contextFactory=()=>新的LinqDataContext(connectionString);
返回上下文工厂;
}
}
公共MyProjectViewModelService():此(DefaultContextFactory)
{
}
公共MyProjectViewModelService(Func contextFactory)
{
_contextFactory=contextFactory;
}
我想如果我能摆脱我的静态关键字,它应该会工作。我确认在Program.exe中启动应用程序时,已在structureMap容器中初始化我的ISettingReader
那我该怎么办?
谢谢
约翰
PS:我在stackoverflow上发现了类似的问题,但他不使用structureMap:
为什么不将代码从getter移到默认构造函数中,并将ISettingReader作为依赖项放在构造函数中呢。当您请求新的MyProjectViewModelService Structuremap时,它将自动解析ISettingReader并为该依赖项提供实例化的默认类型 所以如果你想
公共MyProjectViewModelService(ISettingReader设置阅读器)
{
var connectionString=settingReader.GetSetting(“MyProject.connectionString”);
_contextFactory=()=>新的LinqDataContext(connectionString);
}
你可以去掉剩下的
structuremap中的例外情况是,您没有为ISettingReader配置任何默认实例。您完全正确。我以为我很了解结构图,但实际上不知道。但无论如何,非常感谢,蒂奇普,你是C#发展之神。