2015-02-10 62 views
0

我有類,我使用它來註冊爲GlobalFilter來處理execpions。我註冊在global.asax上,那裏一切都很好。
當我的操作發生異常時,我輸入OhException方法並獲取NullReference異常,因爲LogManager屬性爲null。

爲什麼nInject不注入它?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); 
    } 
+2

默認情況下,屬性由CLR創建,而不是由您的DI庫創建。 DI庫只能在自己創建的對象中注入依賴關係,或者當您明確告訴它建立此對象時。那麼你究竟做了什麼配置,讓你覺得Ninject應該注入這個屬性? – Steven 2015-02-10 20:53:00

+0

您是否閱讀過文檔?你有沒有專門查看[this](https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-filters)?你看過[這個SO條目](http://stackoverflow.com/questions/5078046/ninject-and-mvc3-dependency-injection-to-action-filters)它涵蓋了你的問題? – BatteryBackupUnit 2015-02-11 06:13:18

+0

@Steven:感謝您的評論,我支持我更好地理解DI,我通過新的關鍵工作創建了實例,所以這會造成問題。將您的評論粘貼爲答案,我會將其標記爲解決方案 – Jacek 2015-02-16 07:13:19

回答

1

默認情況下,由CLR創建的屬性,而不是對象你的DI庫。 DI庫只能在自己創建的對象中注入依賴關係,或者當您明確告訴它建立此對象時。因此,如果您的new向上對自己或讓CLR創建屬性,則DI庫沒有機會向其注入依賴關係。