类在棱镜中引用自己的静态反模式吗?

本文关键字:模式 静态 自己的 棱镜 引用 | 更新日期: 2023-09-27 18:07:03

我有一个应用程序,我的设计方法是这样的:

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);
    }
}

管理器类已经在Bootstrapper中注册,如:

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

问题是我是否需要在其字段中定义我的管理器对象为静态才能达到其状态?或者这是反模式的,或者对性能不利?

类在棱镜中引用自己的静态反模式吗?

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