У меня простой интерфейс ICloudStorageRepository
, который реализуется двумя конкретными классами:
public class AWSStorageRepository : ICloudStorageRepository
{
private readonly IS3Client _client;
public AWSStorageRepository(AWSCredentials credentials)
{
_client = new AWSStorageFactory(credentials).Create();
}
}
и:
public class AzureStorageRepository : ICloudStorageRepository
{
private readonly IAzureClient _client;
public AzureStorageRepository(AzureCredentials credentials)
{
_client = new AzureStorageFactory(credentials).Create();
}
}
, затем в моем клиентеУ меня есть служба:
public class CloudService
{
public CloudService(ICloudStorageRepository repository)
....
public Task<ListFiles> GetFiles(GetFilesInput input)
{
if(input.Provider == 'aws')
resolve with AWSStorageRepository
if(input.Provider == 'azure')
resolve with AzureStorageRepository
}
}
Я использую Castle Windsor в качестве контейнера. Я получу учетные данные во время выполнения во входном параметре, просто для однократного использования, поэтому мне нужно передать его в качестве зависимости аргумента.
Как я могу сделать это во время выполнения без регистрации в контейнере?