Инъекция зависимостей при авторизации

Я создаю правило авторизации/политику для моего приложения ASP.NET 5 MVC. Создание было простым и довольно простым в использовании, и оно работает (с моими базовыми тестами). Однако теперь мне нужно, чтобы мой контекст данных был в этом требовании.

Я создал конструктор в моей реализации IAuthorizationRequirement, который принимает объект MyContext, который реализует DbContext.

Я регистрирую IAuthorizationRequirement, как в моем файле Startup.cs.

services.Configure<authorizationoptions>(options => 
 {
 options.AddPolicy("AllowProfileManagement", policy => policy.Requirements.Add(
 new AllowProfileManagementRequirement(new MyRepository(new MyContext()))));
 });
</authorizationoptions>

К сожалению, когда мое правило выполняется, MyContext не знает строки подключения, которые используются так (дальше в Startup.cs):

services.AddEntityFramework()
 .AddSqlServer()
 .AddDbContext<memorialcontext>(options =>
 options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
</memorialcontext>

Я использую DI для этих типов иначе (и он работает).

services.AddTransient<myrepository>(
 provider => new MyRepository(provider.GetRequiredService<mycontext>()));
</mycontext></myrepository>

Я знаю, что я делаю неправильно, но я не вижу, как сделать это правильно, чтобы DI был задействован во всем.

1 ответ

Как он всегда работает. Отправьте вопрос, и ответ приходит вскоре после этого. Здесь, как для тех, кто может столкнуться с моим вопросом.

services.Configure<authorizationoptions>(options => 
 {
 options.AddPolicy("AllowProfileManagement", policy => policy.Requirements.Add(
 services.BuildServiceProvider().GetRequiredService< AllowProfileManagementRequirement>()));
 });
</authorizationoptions>

licensed under cc by-sa 3.0 with attribution.