首页 > 解决方案 > 在 C# 中的静态对象中保存类实例

问题描述

我们有一个“ DataAccessServiceConnector ”类,其中我们很少有与数据访问服务通信的方法。

public class DataAccessServiceConnector: IDataAccessServiceConnector
{
     public async Task<HttpResponseMessage> GetDataAccessServiceResponse()
     {
        //Some code
        return GetDataFromDataAccessService();
     }        
}

我们有一个接口:

public interface IDataAccessServiceConnector
{
    Task<HttpResponseMessage> GetDataAccessServiceResponse();
}

并且有一个不同的类,即在静态对象中保存“DataAccessServiceConnector”类的实例。

public class ClassA
{
  public static IDataAccessServiceConnector DataAccessConnector;
  //Constructor of the Class
  ClassA()
  {
     DataAccessConnector = DataAccessConnector ?? new DataAccessServiceConnector();
  }
}

将类实例(即DataAccessServiceConnector)保存在静态对象(即DataAccessConnector )中是不好的做法吗?

标签: c#design-patternsstaticthread-safety

解决方案


选项1。

如果已经存在每个人都可以访问的顶级对象,例如“程序”或“应用程序”,则可以将实例对象设置为新字段或属性。

选项 2。

从实例对象提供对实例对象的静态访问,作为静态方法/字段/属性。

或者,正如您所描述的,提供从其他任意类型对实例对象的静态访问,如果这样做对您的设计很方便的话。实际上,您所描述的阶级层次对我来说听起来很正常。


推荐阅读