Structuremap单例用法

时间:2017-01-10 17:31:04

标签: c# dependency-injection singleton structuremap

我想了解我是否需要在结构地图代码中使用.singleton()。 stackoverflow(StructureMap singleton)上已经有一个关于此的问题,但我想确定我肯定使用正确的语法。其中一个答案暗示如果我返回一个类型我需要使用.singleton()以便我的代码在这里:

            x.For<IApprovedProgrammesHelper>().Use<ApprovedProgrammesHelper>();
            x.For(typeof(ICache<>))
                .Use(typeof(CacheHelper<>))
                .Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);

应如下所示:

            x.For<IApprovedProgrammesHelper>().singleton().Use<ApprovedProgrammesHelper>();
            x.For(typeof(ICache<>))
                .Singleton()
                .Use(typeof(CacheHelper<>))
                .Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);

这是对的吗?或者我误解了这应该如何运作?我不完全确定代码对代码的影响。值得一提的是.Use&lt;&gt;中的类型。声明无论如何都不遵循单身模式。

感谢您提前的时间 萨姆

1 个答案:

答案 0 :(得分:0)

您对Singleton API的使用是正确的,但是如果不知道您的代码在做什么,很难说您是否应该将其设为单身。

通过添加Singleton()方法调用,您可以告诉StructureMap您希望它创建一个ICache<>实例,并将该对象的任何其他请求解析为一个实例。

例如,将以下类标记为单例将始终在第一次调用时在日期和时间中解析:

public class SingletonExample
{

    private readonly DateTime _time;

    public SingletonExample(){
        _time = DateTime.Now;
    }

    public DateTime GetDateTime()
    {
        return _time;
    }
}