[英]Create a singleton object scoped at the request level with out an IOC container
[英]Architecturally replace singleton main object with IoC Container
我的问题是关于软件体系结构的一般性。
让我们考虑一个例子:
我们有一个Windows服务应用程序。
Program.cs创建并启动MainService
类的实例。
MainService
从ServiceBase
继承,因此实现OnStart(string[] args)
方法。
通常,在设计应用程序时,我会在OnStart
方法中执行以下操作:
MainSingletonObject.Initialize();
初始化将从app.config中读取配置数据,并创建所需类的实例,打开WCF主机(如果有)等。
这是启动服务应用程序的好习惯吗? 您对改善设计有何个人建筑建议? 在哪里可以放置IoC容器,如果要手动进行依赖项注入,为什么还要使用它。
我将在此处的服务引导阶段使用IoC:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServiceClass()
};
ServiceBase.Run(ServicesToRun);
不用new ServiceClass
,我将通过IoC解析服务类。 因此,您避免在服务实现中具有IoC依赖关系。 如果您需要通过注入从实现内部构造一个全新的对象,请考虑公开一个在IoC中注册的服务ITypeFactory
,该服务将您的代码与您将使用的特定容器隔离开。 通常,如果您也隔离容器,则可以在IoC中衡量良好的设计。
Singleton不得依赖其他人对其进行初始化。 使用后将对其进行初始化。
这就是我要做的:
public class MySingleton
{
private static readonly MySingleton _instance = new MySingleton();
private MySingleton()
{
// ... read config
}
public static MySingleton Instance
{
get { return _instance; }
}
}
在这里, static readonly
确保这是延迟加载 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.