netCore中 在过滤器中注入属性(依赖注入)
1.第一种情况就是简单给过滤器注入属性
我们想要创建一个Filter Attribute并需要依赖注入的话一般想要的代码为:
public class FilterClass : ActionFilterAttribute { public IDependency1 Dependency1 { get; set; } public IDependency2 Dependency2 { get; set; } public FilterClass(IDependency1 dependency1, IDependency2 dependency2) { // ...use dependencies } }
Startup类的ConfigureServices中注册服务:
services.AddScoped<FilterClass>();
在需要标记的控制器上使用ServiceFilter
[ServiceFilter(typeof(FilterClass))] public class TextController : Controller { }
2.还有一种情况就是需要给过滤器注入属性并传递普通参数
public class FilterClass : ActionFilterAttribute { public IDependency1 Dependency1 { get; set; } public IDependency2 Dependency2 { get; set; } private string _name; private string _value public FilterClass(IDependency1 dependency1, IDependency2 dependency2,string name=null,string value=null) { Dependency1 =dependency1; Dependency2 =dependency2; _name=name; _value=value } }
在控制器中使用TypeFilter(不需要在Startup中注册服务)
//不传递参数 [TypeFilter(typeof(FilterClass))] public class TextController : Controller { } //传递一个参数,此时name=age [TypeFilter(typeof(FilterClass),Arguments = new object[] {"age" })] public class TextController : Controller { }
//传递两个参数,此时name=age,value=18
[TypeFilter(typeof(FilterClass),Arguments = new object[] {"age","18" })] public class TextController : Controller { }
浙公网安备 33010602011771号