2020-04-08
zelder
2020-04-25
08/04
2020

Шпаргалки по ASP.NET Core MVC


Настройка

Отмена публикации папки контента
<ItemGroup>
  <Content Update="wwwroot\src\**\*" CopyToPublishDirectory="Never" />
</ItemGroup>

Файлы конфигурации

Значение из файла конфигурации (appsettings.json) в методе ConfigureServices:
Configuration["Data:TestProduct:ConnectionString"];

Регистрация секции конфигурации в ConfigureServices (с биндингом в свой класс):
services.Configure<MyConfigSectionModel>(Configuration.GetSection("Mysection"));

Инъекция через конструктор (после регистрации секции, как выше)
private IOptions<MyConfigSectionModel> _config;
public ContructorOfSomeObject(IOptions<MyConfigSectionModel> config)
{
  this._config = config;
  // this._config.Value. // доступ к модели секции конфигурации
}

Изолированная привязка секции конфигурации
private IOptions<MyConfigSectionModel> _config;
public ContructorOfSomeObject_2(IConfiguration configuration) // configuration придет через инъекцию "сам"
{
  this._config = new MyConfigSectionModel();
  configuration.GetSection("Mysection").Bind(_config); // сами биндим, что нам необходимо
}

Секция из своего файла конфигурации
private IOptions<MyConfigSectionModel> _config;
public RouteRepository_V2(IWebHostEnvironment env) // env придет через инъекцию "сам"
{
   // считываем интересующий нас файл конфигурации
   var builder = new ConfigurationBuilder()
     .SetBasePath(env.ContentRootPath)
     .AddJsonFile($"Configs/myconfig.json", optional: true, reloadOnChange: true)
     .AddEnvironmentVariables();
   var configuration = builder.Build();
   this._config = new MyConfigSectionModel();
   configuration.Bind(_config);
}
.
Зависимости (DI)

Регистрация сервисов
public void ConfigureServices(IServiceCollection services)
{
  services.AddControllersWithViews();
  services.AddSingleton<IRouteRepository, RouteRepository_V1>(); // регистрируем наш сервис
  services.AddSingleton<MyService>(); // регистрируем другой наш сервис
}

"Автоматическая" инъекция через конструктор
public class MySomeClass
{
  public MySomeClass(IRouteRepository repo, MyService myService) // "автоматическая" инъекция
  {
    // ..
  }
}

Самостоятельно получаем сервис с необходимой инъекцией
// где-то в методе Configure в Startup
var myService = app.ApplicationServices.GetRequiredService<MyService>();
myService.DoMethodFromService(somearg);



.