Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递给懒惰的单例GetInstance_C#_Lazy Evaluation - Fatal编程技术网

C# 将参数传递给懒惰的单例GetInstance

C# 将参数传递给懒惰的单例GetInstance,c#,lazy-evaluation,C#,Lazy Evaluation,我正在使用.net4的Lazy-type方法创建一个单例实例。但是我想将配置文件的三个文件路径传递给返回单例的属性实例 public sealed class Singleton { private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton()); public static Singleton Instance {

我正在使用
.net4的Lazy-type
方法创建一个单例实例。但是我想将配置文件的三个文件路径传递给返回单例的属性
实例

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
    }
}
公共密封类单例
{
私有静态只读惰性=
新的懒惰(()=>newsingleton());
公共静态单例实例{get{return lazy.Value;}}
私人单身人士()
{
}
}

你能告诉我们为什么你的班级需要单身吗?也许您可以使用IoC容器,在这种情况下,您可以确保IoC设置中只有一个类实例

如果您真的想使用单例,可以考虑添加一些init/config方法。您的单例必须在访问实例之前进行初始化(如果不是,则抛出异常)。我不喜欢这个解决方案,因为Singleton类的用户需要知道初始化步骤。

//
/// <summary>
/// Single ton class
/// </summary>
public sealed class Singleton
{
    private static Lazy<Singleton> lazy = null;
    /// <summary>
    /// You can use this param even  you can pass to your base class
    /// </summary>
    /// <param name="parameter"></param>
    private Singleton(int parameter)
    {

    }
    /// <summary>
    /// Creaeting single object
    /// </summary>
    /// <param name="parameter"></param>
    /// <returns></returns>
    public static Singleton CreateSingletonObj(int parameter)
    {
        if (lazy == null)
        {
            lazy = new Lazy<Singleton>(() => new Singleton(parameter));
        }
        return lazy.Value;
    }
}
///单吨级 /// 公共密封类单件 { 私有静态Lazy=null; /// ///即使可以传递给基类,也可以使用此参数 /// /// 私有单例(int参数) { } /// ///克里特单个物体 /// /// /// 公共静态单例CreateSingletonObj(int参数) { if(lazy==null) { lazy=newlazy(()=>newsingleton(参数)); } 返回lazy.Value; } }
我认为单例模式不适合您的用例。也许您可以尝试工厂模式,让工厂为您提供一个正确配置的实例。IoC容器能否确保只存在一个实例?我不熟悉这个概念。是的,像StructureMap这样的IoC容器可以让你指定在应用程序@liv2hak的引导过程中,你是设法使用了上面的代码还是决定使用IoC?@jedgard似乎,对于IoC的实现,这里有一个帖子,上面有一个@MichaŻołnieruk的列表,这段代码没有编译
Init
被视为静态ctor。In必须使用
void
Singleton
返回<代码>惰性
私有成员不能是
只读
,因为它是在静态方法中初始化的。