在我的基本控制器上,我放置了Logger
属性。
此LoggerAttribute如下所示:
public class LoggerAttribute: InjectableFilterAttribute
{
public override Type FilterType
{
get { return typeof (LoggerActionFilter); }
}
}
此loggerattribute上的ctor被命中,但FilterType getter没有。
过滤器本身的相关部分如下所示:
public class LoggerActionFilter: IActionFilter
{
private readonly ILoggerService logger;
public LoggerActionFilter (ILoggerService logger)
{
this.logger = logger;
}
<IActionFilter Implementeation>
}
过滤器的ctor也不会被击中。
对于我的服务的连接和servicelocator的实例化检查here
可以在here
我错过了什么?
答案 0 :(得分:1)
这应该自动提供为应用程序配置正确的ControllerFactory。
据我所知,这必须是TurbineControllerFactory或派生类的实例。 TurbineControllerFactory设置TurbineActionInvoker,负责定位正确的过滤器。
请注意,如果您使用DI容器(Turbine术语中的服务定位器)注册自定义IControllerFactory,则将使用此IControllerFactory类型,如果这不是从TurbineControllerFactory派生,则不会将TurbineActionInvoker的实例分配给创建的Controller - 这意味着永远不会调用您的InjectableFilterAttribute。
配置Turbine应用程序的目的是定义一个派生自TurbineApplication的自定义应用程序类。
举个例子,这是Turbine配置的Global.asax的整个内容:
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApplication" Language="C#" %>
但请注意,没有任何Global.asax.cs。
MyApplication类必须派生自TurbineApplication并正确配置DI容器。这是一种方法:
public class MyApplication : TurbineApplication
{
static MyApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new WindsorServiceLocator());
}
}
显然,如果您使用另一个DI容器,可以将WindsorServiceLocator替换为另一个DI容器。
答案 1 :(得分:1)
我有几个问题要问你: