代码之家  ›  专栏  ›  技术社区  ›  Alexander Farber

如何使Unity容器将参数传递给单例构造函数?

  •  0
  • Alexander Farber  · 技术社区  · 6 年前

    作为一个新手,我必须使用WebApi和统一容器:

    UnityContainer container = new UnityContainer();
    container.RegisterType<IConfigurationReader, ServiceFabricConfigurationReader>();
    container.RegisterType<ISettingsManager, SettingsManager>(new SingletonLifetimeManager());
    container.RegisterFactory<ICosmosDbClientFactory>(c =>
    {
        IConfigurationReader configReader = c.Resolve<IConfigurationReader>();
        string primaryConnectionString = configReader.ReadConfig(ConfigurationReaderKeys.CosmosDbConnectionString);
        string dbName = configReader.ReadConfig(ConfigurationReaderKeys.CosmosDbDatabaseName);
        DocumentClient client1 = CosmosClientFactory.CreateClient(new DataStoreInfo(primaryConnectionString), retryPolicy);
        DocumentClient client2 = CosmosClientFactory.CreateClient(new DataStoreInfo(primaryConnectionString), retryPolicy);
        return new CosmosDbClientFactory(client1, client2, dbName);
    });
    config.DependencyResolver = new UnityResolver(container);
    appBuilder.UseWebApi(config);
    

    对于上面的依赖注入,我想再添加一个singleton,它当前使用以下代码来实例化自身:

    IEventHubEventSender eventSender = new EventHubEventSender(
        new EventHubConfigReader(new DynamicResourceSyncer(configReader)),
        ServiceTypes.AnalyticsEventHub);
    

    上面的代码已经在微服务的另一部分工作了,但是我想创建 eventSender 对象,因为这样我就可以在我尝试实现的API控制器单元测试中替换它。

    container.RegisterType<IEventHubEventSender, EventHubEventSender>(new SingletonLifetimeManager());
    

    1. new EventHubConfigReader(new DynamicResourceSyncer(configReader))
    2. ServiceTypes.AnalyticsEventHub
    

    如何让Unity将这些参数传递给singleton构造函数?

    0 回复  |  直到 6 年前