繁体   English   中英

在架构上用IoC容器替换单例主要对象

[英]Architecturally replace singleton main object with IoC Container

我的问题是关于软件体系结构的一般性。

让我们考虑一个例子:

我们有一个Windows服务应用程序。

Program.cs创建并启动MainService类的实例。

MainServiceServiceBase继承,因此实现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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM