类在棱镜中引用自身的静态反模式

时间:2014-06-05 23:29:52

标签: c# design-patterns prism

我有一个应用程序,我的设计方法如下:

class Manager
{
    public int State;

    static Manager _instance = null;
    public static Manager Instance
    {
        get { return _instance; }
        set
        {
            if (_instance == value)
                return;
            _instance = value;
        }
    }

    public Manager()
    {
        State = 0;
        Instance=this;
    }
}
class Module1
{
    public void GetState()
    {
        Console.WriteLine(Manager.Instance.State);
    }
}
class Module2
{
    public void GetState()
    {
        Console.WriteLine(Manager.Instance.State);
    }
}
class Module3
{
    public void GetState()
    {
        Console.WriteLine(Manager.Instance.State);
    }
}

Manager类已在Bootstrapper中注册,如:

 protected override void ConfigureContainer()
 {
       base.ConfigureContainer();
       Container.RegisterType<Manager>(new ContainerControlledLifetimeManager());
 }
 protected override void InitializeModules()
 {
      Manager man= Container.Resolve<Manager>();
 }

问题是我需要在其字段中将我的经理对象定义为静态才能达到其状态吗?或者这是反模式还是表现不好?

1 个答案:

答案 0 :(得分:1)

如果您只想拥有一个Manager类实例,最好使用RegisterInstance方法在容器中注册它。这样,无论何时将类注入依赖代码,它始终是类的同一实例。在这种情况下,您不需要在类中使用静态参数,稍后您可以通过引入接口来减少耦合。然后客户端类将获得IModule参数,而不是具体的Module对象,并且容器将确保在应用程序的生命周期中,IModule实现对象始终是相同的实例。