由Ninject注入的属性仍为空

时间:2015-02-10 13:48:49

标签: c# .net model-view-controller dependency-injection ninject

我有类,我用它来注册为GlobalFilter来处理execpions。我在global.asax上注册,一切都很好。
当我的动作发生异常时,我输入OhException方法并获得NullReference异常,因为LogManager属性为null。

为什么nInject不注入它?

public class HandleErrorFilterAttribute : HandleErrorAttribute
{
    [Inject]
    public ILogManager LogManager { get; set; }

    public override void OnException(ExceptionContext filterContext)
    {
        LogManager.LogError("Unhandled exception thrown", filterContext.Exception);

        base.OnException(filterContext);
    }
}

这段代码服务注入(我忘了写一下)

kernel.Bind<ILogManager>().To<LogManager>();

然后我创建了对象

    public void RegisterGlobalFilters()
    {
        var handleErrorAttribute = new HandleErrorFilterAttribute();
        GlobalFilters.Filters.Add(handleErrorAttribute);
    }

1 个答案:

答案 0 :(得分:1)

默认情况下,属性由CLR创建,而不是由DI库创建。 DI库只能在它自己创建的对象中注入依赖项,或者当您明确告诉它“构建”时。这个对象。因此,如果你自己new对象或让CLR创建属性,DI库就没有机会将依赖注入其中。