gpt4 book ai didi

ASP.NET 5 DI 应用程序在 Controller 外部设置

转载 作者:行者123 更新时间:2023-12-02 16:30:40 27 4
gpt4 key购买 nike

我可以像这样在 Controller 中进行 DI 应用设置

 private IOptions<AppSettings> appSettings;
public CompanyInfoController(IOptions<AppSettings> appSettings)
{
this.appSettings = appSettings;
}

但是如何在我的自定义类中像这样 DI

  private IOptions<AppSettings> appSettings;
public PermissionFactory(IOptions<AppSettings> appSetting)
{
this.appSettings = appSettings;
}

我在 Startup.cs 中的寄存器是

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

最佳答案

“正确”的方式

在 DI 中注册您的自定义类,就像在 ConfigureServices 中注册其他依赖项一样。方法,例如:

services.AddTransient<PermissionFactory>();

(您可以使用 AddTransient 或您需要的任何其他生命周期,而不是 AddScoped )

然后将此依赖项添加到 Controller 的构造函数中:

public CompanyInfoController(IOptions<AppSettings> appSettings, PermissionFactory permFact)

现在,DI 知道 PermissionFactory ,可以实例化它并将其注入(inject)到您的 Controller 中。

如果您想使用PermissionFactoryConfigure方法,只需将其添加到其参数列表中即可:

Configure(IApplicationBuilder app, PermissionFactory prov)

Aspnet 将发挥它的魔力并将类注入(inject)其中。

“令人讨厌”的方式

如果你想实例化PermissionFactory在代码深处的某个地方,您也可以用一种有点令人讨厌的方式来做到这一点 - 存储对 IServiceProvider 的引用在Startup类:

internal static IServiceProvider ServiceProvider { get;set; }

Configure(IApplicationBuilder app, IServiceProvider prov) {
ServiceProvider = prov;
...
}

现在您可以像这样访问它:

var factory = Startup.ServiceProvider.GetService<PermissionFactory>();

同样,DI 将负责注入(inject) IOptions<AppSettings>进入PermissionFactory .

Asp.Net 5 Docs in Dependency Injection

关于ASP.NET 5 DI 应用程序在 Controller 外部设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com