首页 > 解决方案 > 存储一个没有服务定位器的 Unity 依赖注入容器

问题描述

我有一个对硬件系统有很多外部依赖的应用程序。我想对与这些硬件系统交互的服务进行单元测试,因此我将每个服务的外部部分抽象化,以便可以在单元测试中将其替换为 Mock。在单元测试中,我将外部依赖项注入到服务的构造函数中。

在我的生产代码中,我有一个中心位置来注册所有外部依赖项。像这样的东西:

public class DependencyContainer : UnityContainer
{
    private static DependencyContainer instance;
    public static DependencyContainer Instance
    {
        get
        {
            if (instance == null)
                instance = new DependencyContainer();
            return instance;
        }
    }
    private DependencyContainer() : base()
    {
        RegisterTypes();
    }

    private void RegisterTypes()
    {
        this.RegisterSingleton<IExternalService1, ExternalService1>();
        this.RegisterSingleton<IExternalService2, ExternalService2>();
        this.RegisterSingleton<IExternalService3, ExternalService3>();
    }
}

这只是伪装的服务定位器反模式还是注册我的依赖项的合理方式?

标签: c#dependency-injectionunity-containerservice-locator

解决方案


推荐阅读