my appsettings.json:
Код: Выделить всё
"AzureBlobStorageConfiguration": {
"Storages": {
"Storage1": {
"StorageName": "Storage1",
"ConnString": "connString",
"AzureBlobContainerName": "containerName"
},
"Storage2": {
"StorageName": "Storage2",
"ConnString": "connString",
"AzureBlobContainerName": "containerName"
},
"Storage3": {
"StorageName": "Storage3",
"ConnString": "connString",
"AzureBlobContainerName": "containerName"
}
}
< /code>
Далее в startup.cs Im добавление службы с помощью метода: < /p>
public static IServiceCollection AddAzureStorage1(this IServiceCollection services, IConfiguration configuration)
{
var options = new ABlobStorageConfigurationOptionsDTO();
configuration.GetSection("AzureBlobStorageConfiguration").GetSection("Storages").GetSection("Storage1").Bind(options);
services.AddTransient(isp =>
{
var client = new BlobServiceClient(options.ConnString);
var container = client.GetBlobContainerClient(options.AzureBlobContainerName);
var containerName = options.AzureBlobContainerName;
var storageName = options.StorageName;
return new AzureBlobStorage1(container, containerName, storageName);
});
return services;
}
< /code>
my iazureblobstorage1 выглядит как: < /p>
public interface IAzureBlobStorage1
{
string AzureBlobContainerName { get; }
string StorageName { get; }
public Task DownloadStreamAsyns(string fileName);
public Task Upload(string fileId, Stream stream);
}
< /code>
и azureblobstorage1: < /p>
public class AzureBlobStorage1 : IAzureBlobStorage1
{
private BlobContainerClient _client;
private string _containerName;
private string _storageName;
public string StorageName => _storageName;
public string AzureBlobContainerName => _containerName;
public AzureBlobStorage1(BlobContainerClient client, string containerName, string storageName)
{
_client = client;
_containerName = containerName;
_storageName = storageName;
}
public async Task DownloadStreamAsyns(string fileName)
{
return await _client.GetBlobClient(fileName).OpenReadAsync();
}
public async Task Upload(string fileId, Stream stream)
{
await _client.GetBlobClient(fileId).UploadAsync(stream);
}
}
< /code>
После этого я могу внедрить интерфейс в классе контроллера конструктора: < /p>
public Controller(IAzureBlobStorage1 azureStorage)
{
_azureStorage1 = azureStorage;
}
< /code>
Но если я хочу добавить множество фрагментов (у меня 3 в appsetings.json), я должен: < /p>
Создать интерфейс iazureblobstorage2 (выглядит так же, как iazureblobstrage1 - только изменение имени) < /p>
< /li> AzureBlobStorage2 (выглядя так же, как AzureBlobStorage1 - только изменение имени) < /p>
< /li>
Метод копирования вставки с измененными именами классов < /p>
< /li>
< /ol>
public static IServiceCollection AddAzureStorage2(this IServiceCollection services, IConfiguration configuration)
{
var options = new ABlobStorageConfigurationOptionsDTO();
configuration.GetSection("AzureBlobStorageConfiguration")
.GetSection("Storages").GetSection("Storage2").Bind(options);
services.AddTransient(isp =>
{
var client = new BlobServiceClient(options.ConnString);
var container = client.GetBlobContainerClient(options.AzureBlobContainerName);
var containerName = options.AzureBlobContainerName;
var storageName = options.StorageName;
return new AzureBlobStorage2(container, containerName, storageName);
});
return services;
}
< /code>
Теперь я могу получить его в контроллере по < /p>
public Controller(IAzureBlobStorage2 azureStorage)
{
_azureStorage2 = azureStorage;
}
Подробнее здесь: https://stackoverflow.com/questions/684 ... ifferent-c