【发布时间】:2011-05-11 08:35:41
【问题描述】:
我需要使用一些参数来实例化一个单例类。我现在的做法是:
class SingletonExample
{
private SingletonExample mInstance;
//other members...
private SingletonExample()
{
}
public SingletonExample Instance
{
get
{
if (mInstance == null)
{
throw new Exception("Object not created");
}
return mInstance;
}
}
public void Create(string arg1, string arg2)
{
mInstance = new SingletonExample();
mInstance.Arg1 = arg1;
mInstance.ObjectCaller = new ObjectCaller(arg2);
//etc... basically, create object...
}
}
实例是“延迟”创建的,这意味着我在应用启动时没有所有需要的参数。
一般来说,我不喜欢强制对方法调用进行排序,但在这里我看不到其他方法。 IoC 也不会解决它,因为我可以在容器中注册它,我也可以调用 Create()...
您认为这是一个可行的方案吗?你有别的想法吗?
编辑:我知道我写的例子不是线程安全的,线程安全不是问题的一部分
【问题讨论】:
-
那不是单例。互斥在哪里? (即
lock)。加上您的getter实例应该是创建实例,而不是 ctor - 这就是重点。 -
我同意 RPM1984,这不是单例。你的论点会改变吗?或者在你的应用程序的整个生命周期中它们会保持不变吗?单例不应该依赖于变量,它可以依赖于配置或另一个单例。但是,请仔细考虑您的设计,并问问自己它是否是您需要的单例。过度使用单例对您的设计非常不利。
-
它是单例的,相信我 :)
getter无法创建实例,因为它没有参数 - 它可以有,但这样写更方便。而且,参数一旦获得就不会改变。 -
论据从何而来?
-
@mastoj - 来自一些服务调用 - 它是半静态数据,在我调用后它是静态的。
标签: c# design-patterns parameters singleton arguments