2016-01-21 84 views
0

我試圖在注入某個名稱空間時有條件地綁定依賴項。我在條件綁定中發現了一個Ninject article,它表示如下:Ninject - 向名稱空間注入依賴項

我們還可以通過提供委託來提供條件邏輯。在這種情況下,要求該類的名稱和名稱空間。

Bind()。To()。When(request => request.Target.Member.Name.StartsWith(「ClassName」)); Bind()。To()。When(request => request.Target.Type.Namespace.StartsWith(「NameSpace.ClassName」));

所以我一直在努力,實現這個如下:

Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x => x.Target.Type.Namespace.StartsWith("My.App.CommissionService")); 

我得到一個空引用異常,但:

對象引用未設置爲一個實例目的。

任何想法我做錯了什麼?

回答

1

x.Target.Type會給你你試圖解決的依賴。在你的情況下,這是​​。

我猜你的意思是將邏輯基於​​將被注入的對象類型。在這種情況下,你需要使用x.ParentContext.Plan.Type這樣的:

Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x => 
{ 
    return x.ParentContext != null && 
     x.ParentContext.Plan 
     .Type.Namespace 
     .StartsWith("My.App.CommissionService"); 
}); 

ParentContextnull的情況下嘗試直接解決​​。