Как заставить контейнер Unity передавать параметры одноэлементному конструктору? - PullRequest
0 голосов
/ 21 марта 2020

Как C# новичок ie Я должен поддерживать микросервис Azure Служба Fabri c, используя WebApi и Unity.Container:

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);

К вышеприведенному внедрению зависимостей я хотел бы добавить еще 1 синглтон, который в данный момент использует для создания себя следующий код:

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

Приведенный выше код уже работает в другой части микросервиса, но я хочу создать объект eventSender через зависимость инъекция, потому что тогда я смогу заменить его в модульном тесте контроллера API, который я пытаюсь реализовать.

Моя проблема - я не могу просто написать

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

, потому что мне как-то нужно чтобы передать 2 параметра конструктору:

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

Как можно заставить Unity передавать эти параметры одноэлементному конструктору?

...