所以我需要在我正在使用的授权属性中注入许多不同的服务。为简单起见,我将留下这个以显示配置管理器。
public class FeatureAuthorizeAttribute : AuthorizeAttribute
{
public IConfigurationManager ConfigurationManager;
private readonly string _feature;
public FeatureAuthorizeAttribute(string feature)
{
_feature = feature;
var test = ConfigurationManager.GetCdnPath();
}
}
将使用以下内容
[FeatureAuthorize("Admin")]
我尝试过使用构造函数注入
public FeatureAuthorizeAttribute(string feature, IConfigurationManager configurationManager)
{
ConfigurationManager = configurationManager;
_feature = feature
}
然而,当我尝试
时,这只会导致错误[FeatureAuthorize("Admin", IConfigurationManager)]
首先,这似乎是错误的做法。我假设我需要在容器中注册我的自定义授权属性以使其开始接收
答案 0 :(得分:10)
创建Passive Attributes,而不是尝试将依赖注入与属性一起使用(您不能以任何合理,有用的方式执行)。
具体来说,在这种情况下,假设这是一个ASP.NET MVC场景,您无法从AuthorizeAttribute派生。相反,您应该让授权服务查找您的自定义属性,并实施IAuthorizationFilter。然后将过滤器添加到应用程序的配置中。
可在此答案中找到更多详细信息:https://stackoverflow.com/a/7194467/126014。