如何使用DI在属性中设置实例。 ASP.NET vNext

时间:2015-10-28 11:45:35

标签: c# .net asp.net-mvc asp.net-core

我有下一个代码:

public class BasicAuthenticationAttribute : ActionFilterAttribute
{
    public BasicAuthenticationAttribute()
    {
         var appEnvironment = CallContextServiceLocator.Locator.ServiceProvider.GetService(typeof(IApplicationEnvironment)) as IApplicationEnvironment;
         IConfiguration configuration = new ConfigurationBuilder()
                .SetBasePath(appEnvironment.ApplicationBasePath)
                .AddJsonFile("config.json").Build();
          UserName = configuration["UserName"];
          Password = configuration["UserPassword"];
    } 
}
public class PagesController : Controller
{
    [HttpGet("settings")]
    [BasicAuthentication] // I use it there
    public IActionResult Settings()
    {
         ...
    } 
}

这是basicAuth的属性。 我需要在构造函数中注入“IConfiguration configuration”,以读取config json。

如何将IConfiguration导入我的属性?可能有像CallContextServiceLocator.Locator.ServiceProvider这样的服务,但对于IConfiguration

PS我明白属性值必须是常量

2 个答案:

答案 0 :(得分:0)

Attribute values must be constants,因此您将无法传入类的实例。

答案 1 :(得分:0)

要在属性类中使用它:

[FromServices]
public IConfiguration Configuration { get; set; }

它必须是公共的并且具有getter和setter,它将自动从DI获得服务。