对AuthorizationOptions的依赖注入

本文关键字:注入 依赖 AuthorizationOptions | 更新日期: 2023-09-27 18:11:53

我正在为ASP创建一个授权规则/策略。NET 5 MVC应用程序。创建它非常简单,非常容易,而且它正在工作(通过我的基本测试)。但是,我现在需要将我的数据上下文放入需求中。

我在IAuthorizationRequirement实现中创建了一个构造函数,它接受一个实现DbContextMyContext对象。

我在我的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在所有方面都得到利用。

对AuthorizationOptions的依赖注入

总是这样。把问题贴出来,很快就会有答案。以下是对那些可能遇到我的问题的人的建议。

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