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 { }

 

posted @ 2017-08-23 20:06  fy___~  阅读(505)  评论(0)    收藏  举报