作为一个新手,我必须使用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构造函数?