[英]Holding a class instance in a Static object in 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 )中是不好的做法吗?
我认为,您的问题的答案是基于StackOverflow的基于意见的。
这是经典的“ 单例模式不好吗?” 题:
特别是Singletons以及通常的共享写访问内存有很多问题。
我个人决定仅将Singletons用作最后的解决方案。 即使那样,我仍将依赖于依赖项注入框架的单例注册,而不是static
字段。 (例如, SimpleInjector的单例注册 。)
但是在将某些内容注册为Singleton之前,请先重新考虑使用常规对象。
选项1。
如果已经存在每个人都可以访问的顶级对象(例如“程序”或“应用程序”),则可以将实例对象设为新的字段或属性。
选项2。
提供从实例对象到实例对象的静态访问,作为静态方法/字段/属性。
或者,如上所述,如果这样做对您的设计方便,则可以从其他任意类型提供对实例对象的静态访问。 实际上,您所描述的类层次结构对我来说听起来很正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.