1

我的主界面下有两个分支,并尝试在这里使用 Ninject IOC 根据某些条件动态加载适当的类。这是我对班级结构和问题的描述

  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 时,它总是抛出一个空错误。我在这里错过了什么吗?任何帮助表示赞赏

4

1 回答 1

0

细节太长,评论太长了,所以我不得不把它放在另一个部分

当我使用手表时,我看到:值不能为空。参数名称:来源

堆栈跟踪是:

 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
于 2013-08-30T15:03:01.447 回答