7

Tworzę regułę/regułę autoryzacji dla mojej aplikacji ASP.NET 5 MVC. Stworzenie go było proste i łatwe do zrobienia i działa (z moimi podstawowymi testami). Jednak teraz muszę wprowadzić kontekst danych do wymagania.Wstrzykiwanie zależności na AuthorizationOptions

Utworzono konstruktora w mojej implementacji IAuthorizationRequirement, która zajmuje obiekt MyContext, który implementuje DbContext.

Rejestruję IAuthorizationRequirement tak jak w moim pliku Startup.cs.

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

Niestety, kiedy moja reguła działa, MyContext jest nieświadomy ciągi połączeń, które są wykorzystywane jak tak (dalej w Startup.cs):

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

używam DI dla tych typów inaczej (i to działa).

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

Wiem, co robię, nie jest w porządku, ale nie widzę sposobu, aby to zrobić tak, aby DI był wykorzystywany we wszystkim.

Odpowiedz

5

Tak to zawsze działa. Opublikuj pytanie, a odpowiedź wkrótce. Oto jak dla tych, którzy mogą natknąć się na moje pytanie.

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