C# InjectableFilterAttribute从不命中过滤器
在我的基本控制器上,我放置了C# InjectableFilterAttribute从不命中过滤器,c#,attributes,ioc-container,turbine,C#,Attributes,Ioc Container,Turbine,在我的基本控制器上,我放置了Logger属性。 此日志属性如下所示: public class LoggerAttribute: InjectableFilterAttribute { public override Type FilterType { get { return typeof (LoggerActionFilter); } } } public class LoggerActionFilter: IActionFilter { p
Logger
属性。
此日志属性如下所示:
public class LoggerAttribute: InjectableFilterAttribute
{
public override Type FilterType
{
get { return typeof (LoggerActionFilter); }
}
}
public class LoggerActionFilter: IActionFilter
{
private readonly ILoggerService logger;
public LoggerActionFilter (ILoggerService logger)
{
this.logger = logger;
}
<IActionFilter Implementeation>
}
此loggerattribute上的ctor被命中,但FilterType getter未被命中
过滤器本身的相关部分如下所示:
public class LoggerAttribute: InjectableFilterAttribute
{
public override Type FilterType
{
get { return typeof (LoggerActionFilter); }
}
}
public class LoggerActionFilter: IActionFilter
{
private readonly ILoggerService logger;
public LoggerActionFilter (ILoggerService logger)
{
this.logger = logger;
}
<IActionFilter Implementeation>
}
公共类LoggerActionFilter:IActionFilter
{
专用只读iLogger服务记录器;
公共LoggerActionFilter(iLogger服务记录器)
{
this.logger=记录器;
}
}
过滤器的ctor也不会被击中
有关我的服务的接线和servicelocator的实例化,请检查可以找到iLogger服务的注册
我遗漏了什么?如果为应用程序配置了正确的ControllerFactory,那么这应该会自动工作 据我所知,这必须是TurbineController Factory的实例或派生类。TurbineController工厂设置TurbineActionInvoker,负责定位正确的过滤器 请注意,如果在DI容器(涡轮机术语中的服务定位器)中注册自定义IControllerFactory,则将使用此IControllerFactory类型,如果此类型不是从TurbineController Factory派生的,它不会将TurbineActionInvoker的实例分配给所创建的控制器,这同样意味着您的InjectableFilterAttribute永远不会被调用 配置Turbine应用程序的预期方法是定义从TurbineApplication派生的自定义应用程序类 例如,以下是配置了Global.asax的Turbine的全部内容:
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApplication" Language="C#" %>
显然,如果使用不同的DI容器,您可以用另一个DI容器替换WindsorService Locator。我有几个问题要问您:
- 您使用的是哪个版本的MVC?v1还是v2?如果v2是RC还是beta2
- 你看到那张照片了吗