Я пытаюсь зарегистрировать интерфейс с другим конфигом, как показано ниже:
private static ContainerBuilder RegisterAzureStorage(this ContainerBuilder containerBuilder, IAzureStorageOptions azureStorageOptions)
{
containerBuilder.Register(c =>
new AzureStorageKeyValuePersistenceService(
new AzureStorageKeyValuePersistenceConfig(
azureStorageOptions.DctAzureBlobConnectionString,
azureStorageOptions.DctAzureBlobContainerName)))
.As<IStreamableKeyValuePersistenceService>()
.Keyed<IStreamableKeyValuePersistenceService>(PersistenceStorageKeys.DctAzureStorage)
.SingleInstance();
containerBuilder.Register(c =>
new AzureStorageKeyValuePersistenceService(
new AzureStorageKeyValuePersistenceConfig(
azureStorageOptions.NcsAzureBlobConnectionString,
azureStorageOptions.NcsAzureBlobContainerName)))
.As<IStreamableKeyValuePersistenceService>()
.Keyed<IStreamableKeyValuePersistenceService>(PersistenceStorageKeys.NcsAzureStorage)
.SingleInstance();
return containerBuilder;
}
Тогда в моем конструкторе:
public ReportingController(
[KeyFilter(PersistenceStorageKeys.DctAzureStorage)] IStreamableKeyValuePersistenceService dctStorage,
[KeyFilter(PersistenceStorageKeys.NcsAzureStorage)] IStreamableKeyValuePersistenceService ncsStorage)
{
_dctStorage = dctStorage;
_ncsStorage = ncsStorage;
}
и использование:
await _dctStorage.SaveAsync(........);
await _ncsStorage.SaveAsync(........);
Тем не менее, при выполнении он берет только последнюю регистрацию и сохраняет оба объекта в одном месте.
Я могу заставить его работать, используя перечислимый метод:
public ReportingController(IEnumerable<IStreamableKeyValuePersistenceService> storage)
{
_storage = storage;
}
и затем для каждого перечисляемого, но я бы предпочел использовать метод с ключами, если это возможно.
Есть идеи о том, что мне не хватает?