C# 构造函数链接和静态属性参数以及StructureMap

C# 构造函数链接和静态属性参数以及StructureMap,c#,constructor,structuremap,C#,Constructor,Structuremap,我希望我的构造函数调用另一个带参数的构造函数,但当我这样做时(MyProperty),MyProperty必须是静态的。问题是在这个静态属性的getter中,我必须从structuremap容器中获取ISettingReader的实例,因为它是静态的,我的容器只包含两个元素,而不是超过50个元素,所以它找不到实例。(ISettingReader上的pluginFamily错误) 这是我的密码 private static Func<LinqDataContext> _cont

我希望我的构造函数调用另一个带参数的构造函数,但当我这样做时(MyProperty),MyProperty必须是静态的。问题是在这个静态属性的getter中,我必须从structuremap容器中获取ISettingReader的实例,因为它是静态的,我的容器只包含两个元素,而不是超过50个元素,所以它找不到实例。(ISettingReader上的pluginFamily错误)

这是我的密码

    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#发展之神。