2013-08-29 11 views
0

我在我的主接口 下有兩個分支,並嘗試在此處使用Ninject IOC根據某些矛盾動態加載適當的類。這是我的我的類結構和問題的說明我Ninject在使用StandardKernel.Get()時變爲空。()

Interface I 
    { 
     Void method1(); 
     Void method2(); 
     Void method3(); 
    } 

Abstract class A : I 
{ 
     Abstract void method1();    
     Abstract void method2();    
     Void Method3() { //Some implementation can be shared by all classes } 
} 

分支1

Abstract Class B : A 
{ 
     void method1() { //Some implementation can be shared by B1, B2 } 
} 

B1和B2是在BRANCH1最低水平的類,這將在代碼中使用

Class B1 : B 
{ 
     Void Method2() { //Some implementation } 
} 

Class B2 : B 
{ 
     Void Method2() { //Some implementation } 
} 

但是另外一個分支從抽象類A的居民開始,如下

分支2

Abstract Class C : A 
{ 
     void method1() 
     { 
     //Some implementation which is different from in B.Method1 
     //and can be shared by C1     
     } 
} 

C1是在BRANCH2最低水平的類,這將在代碼

Class C1 : C 
{ 
     Void Method2() { //Some implementation } 
} 

我使用Ninject結合並獲得動態加載類,如下面被使用:

Bind<I>().To<B1>(); 
Bind<I>().To<B2>(); 
Bind<I>().To<C1>(); 

和檢索他們喜歡用kernel.Get<I>();

現在的問題是B1和B2被重新調好,但是當我檢索C1時,它總是拋出一個空錯誤。我在這裏錯過了什麼嗎?任何幫助表示讚賞

+1

什麼是 '零錯誤'?你可能會更好地描述你所得到的例外。 – mipe34

+0

包含確切的異常消息,異常類型和堆棧跟蹤。 – Steven

+0

當我使用手錶時,我看到: 值不能爲空。參數名稱:source – user2730657

回答

0

細節太長了評論,所以我不得不把它放在另一部分

當我使用的手錶我看到:值不能爲null.Parameter名稱:源

堆棧跟蹤是:

at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) 
    at ThePoint.Ingestion.Abstract.FeedsProcessor..ctor() in c:\Users\houyang\Documents\GitHub\The-Point-Redesign\ThePoint.Ingestion\Abstract\FeedsProcessor.cs:line 34 
    at ThePoint.Ingestion.Abstract.WebServiceFeedsProcessor..ctor() 
    at ThePoint.Ingestion.Concrete.GannettLocalProcessorTest..ctor() 
    at DynamicInjector08125ba6b65f454d9309fa177f39cd2d(Object[]) 
    at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 97 
    at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157 
    at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext() 
    at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
    at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:line 37