7

私のASP.NET 5 MVCアプリケーションの認可ルール/ポリシーを作成しています。それを作成するのは簡単で簡単でしたし、(私の基本的なテストで)うまくいきました。しかし、私は今、私のデータコンテキストを要件に合わせる必要があります。AuthorizationOptionsへの依存性注入

DbContextを実装するMyContextオブジェクトを取るIAuthorizationRequirement実装でコンストラクタを作成しました。

私はStartup.csファイルにIAuthorizationRequirementを登録しています。私のルールの実行時に

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がすべてを活用しているようにするのか分かりません。

答えて

5

これは常に機能する方法です。質問を投稿すると、すぐに答えが返ってくる。私の質問に遭遇する可能性のある人のための方法は次のとおりです。

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