我的应用程序中需要一个对象。为实现这一点,我有两种方法
将对象定义为静态。
public class App
{
public static MyClass myObject;
}
制作类Singleton
public class MyClass
{
private MyClass()
{
}
public static MyClass Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
static Nested()
{
}
internal static readonly MyClass instance = new MyClass();
}
}
任何人都可以帮助我解决这两种方法的优缺点。
答案 0 :(得分:2)
我认为这些方法都不好,您应该通过inversion-of-control调查dependency injection。
为什么上述解决方案不好?他们使测试成为一场噩梦,而“全球”对象的生命周期则由其消费者决定。见here for more issues surrounding the singleton anti-pattern。
相反,您最好创建对象,然后将注入到需要它的对象中。在这种情况下,注入只是意味着通过setter或构造函数参数提供它。
通过使用注入,您只需配置需要此“全局”组件的组件,并且通过使用接口,您可以替换不同的版本(例如,真实与模拟变体)。重要的是,“注入”组件的生命周期由周围的框架控制,而不是消费实体。
答案 1 :(得分:0)
我认为2个选项之间的主要区别在于它将被创建的对象。
对于静态成员,将在创建App
对象时或第一次将该类用于其他静态方法/成员时创建。
在单身人士的情况下,可能不需要从头开始使用它,因此在时间消耗不可见的时候及时启动它。