Внедрение зависимостей от AuthorizationOptions

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

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

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

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

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

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

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

services.AddTransient<MyRepository>(
        provider => new MyRepository(provider.GetRequiredService<MyContext>()));

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

1 ответ

Решение

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

services.Configure<AuthorizationOptions>(options => 
    {
        options.AddPolicy("AllowProfileManagement", policy => policy.Requirements.Add(
            services.BuildServiceProvider().GetRequiredService< AllowProfileManagementRequirement>()));
    });
Другие вопросы по тегам