可能重复:
How to implement singleton without using static/global variable? Possible?
大多数人说单身人士是邪恶的原因之一是它提供了一个全球访问点,或者它变成了一个全局变量。是否可以实现单例而不包含任何类型的全局变量,包括静态变量。是否可以在C#.NET中执行此操作?
答案 0 :(得分:3)
你所暗示的问题是,Singleton变成就像一个全局var。它的用途无关紧要。
答案是否定的。你总是需要一个静态的东西,你只能推迟它。而那种失败的观点。
答案 1 :(得分:2)
不,那不会是单身人士。
您可以使用IoC容器仅将内容作为单例注入。
答案 2 :(得分:2)
您可以实现一个接口,然后使用像StructureMap这样的东西。在SM中你可以像这样构建类:
public class Foo : IFoo
{
}
然后您将在容器中定义以下内容:
ObjectFactory.Initialize(x =>
{
x.For<IFoo>.Singleton().Use<Foo>();
}
然后你会在你需要的地方注入这个资源:
public class Bar
{
public Bar(IFoo foo)
{
}
}
所以,现在只会创建一个具体的实例,然后注入需要它的可以数量的类型。
答案 3 :(得分:0)
我不相信。如果没有静态变量,那么您在哪里存储实例?通常,当我想要一个类的单例时,我将所有构造函数设为私有,并提供一个静态方法或属性,如果尚未创建该实例,则提供该实例,并返回该实例。实例本身存储为私有变量,因此访问它的唯一方法是通过提供的方法/属性 - 或反射。