我需要创建一个自定义操作过滤器来实现IActionModelConvention
和IFilterFactory
。
我IActionModelConvention
用来同时设置多条路由,我IFilterFactory
用来注入一些我需要使用的服务。
问题是Apply()
来自 的方法在来自的方法IActionModelConvention
之前被调用,并且我需要注入的服务在.CreateInstance()
IFilterFactory
Apply()
我的问题是如何在Apply()
调用方法之前注入服务?而且我也更喜欢使用IFilterFactory
注入服务,因为它不会强迫我用[ServiceFilter]
or属性包装实际[TypeFilter]
属性。
这是我的代码:
public class Contains2RoutesAttribute : Attribute, IActionModelConvention, IFilterFactory
{
public ISomeService SomeService{ get; set; }
public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
{
ISomeService someService = serviceProvider.GetService<ISomeService>();
return new Contains2RoutesAttribute() { SomeService = someService };
}
public void Apply(ActionModel action)
{
// Here I need to use the service injected:
this.SomeService.DoSomething(); // ERROR: The service here is null.
action.Selectors.Clear();
// Adding route 1:
action.Selectors.Add(new SelectorModel
{
AttributeRouteModel = new AttributeRouteModel { Template = "~/index1" }
});
// Adding route 2:
action.Selectors.Add(new SelectorModel
{
AttributeRouteModel = new AttributeRouteModel { Template = "~/index2" }
});
}
}