У меня есть этот файл конфигурации:
public class Config: IDataConfig, IIdentityServerConfig, IStorageConfig
{
public string ConnectionString { get; set; }
public string Authority { get; set; }
public string AzureStorageConnectionString { get; set; }
}
И в одном из моих классов у меня есть это:
public class StorageClient : IStorageClient
{
private readonly CloudBlobClient _blobClient;
public StorageClient(IStorageConfig config)
{
var storageAccount = CloudStorageAccount.Parse(config.AzureStorageConnectionString);
_blobClient = storageAccount.CreateCloudBlobClient();
}
public CloudBlobContainer GetContainerReference(string name) => _blobClient.GetContainerReference(name);
}
Как вы можете видеть, он ожидает экземпляр IStorageConfig
чтобы быть переданным ему.В старые времена вы использовали autofac и регистрировали конфигурацию как все реализованные интерфейсы.
В ядре .net я хотел бы знать, как это сделать.В настоящее время у меня есть это:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(m => m.AddPolicy("AllowAll", o => o.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()));
services.Configure<Config>(Configuration.GetSection("ConnectionStrings"));
services.Configure<Config>(Configuration.GetSection("Options"));
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
var buildServiceProvider = services.BuildServiceProvider();
var config = buildServiceProvider.GetService<IOptions<Config>>();
services.AddTransient(typeof(IGenericService<>), typeof(GenericService<>));
services.AddTransient<IContainerProvider, ContainerProvider>();
services.AddSingleton<IComparer, Comparer>();
services.AddSingleton<IDataTypeFactory, DataTypeFactory>();
services.AddSingleton<IFilterProvider, FilterProvider>();
services.AddSingleton<IJsonClient, JsonClient>();
services.AddSingleton<INumericFactory, NumericFactory>();
services.AddSingleton<IStorageClient, StorageClient>();
services.AddSingleton<IStringFactory, StringFactory>();
services.AddSingleton<IValidator, Validator>();
services.AddSingleton<HttpClient>();
services.AddDbContext<DatabaseContext>
(options => options.UseSqlServer(config.Value.ConnectionString));
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info {Title = "Situ Experience Platform API", Version = "v1"});
options.IncludeXmlComments($"{System.AppDomain.CurrentDomain.BaseDirectory}\\Api.xml");
});
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = config.Value.Authority;
options.RequireHttpsMetadata = false;
options.ApiName = "Sxp";
});
services.AddMvc()
.ConfigureApiBehaviorOptions(options => { options.SuppressModelStateInvalidFilter = true; });
}
Кто-нибудь знает, как я могу добиться того, что я после?
Вот мой appsettings файл:
{
"ConnectionStrings": {
"ConnectionString": "Server=localhost;Database=sxp_master;Trusted_Connection=True;",
"Storage": "DefaultEndpointsProtocol=https;AccountName=sxp;AccountKey=moo"
},
"Options": {
"Authority": "https://localhost:44362"
},
"Logging": {
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"IncludeScopes": false,
"LogLevel": {
"Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
"Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
"Microsoft.AspNetCore.Mvc.Razor": "Error",
"Default": "Information"
}
},
"LogLevel": {
"Default": "Debug"
}
},
"AllowedHosts": "*"
}