2012-01-19 41 views
4

什麼NInject相當於使用Autofac以下代碼:NInject相當於Autofac的AsClosedTypesOf的

var builder = new ContainerBuilder(); 

System.Reflection.Assembly assembly = ...; 
builder.RegisterAssemblyTypes(assembly).AsClosedTypesOf(typeof(OpenGeneric<>)) 
             .As<IAnInterface>(); 

var resolved = container.Resolve<IEnumerable<IAnInterface>>(); 

回答

2

使用Ninject 3.0.0-RC3可以使用

kernel.Bind(
     x => x.FromThisAssembly() 
      .SelectAllClasses().InheritedFrom(typeof(BaseService<>)).WhichAreGeneric() 
      .BindToAllInterfaces()); 

根據您的要求,您可能可能會刪除WhichAreGeneric聲明。 .SelectAllClasses().InheritedFrom(typeof(BaseService<>)).WhichAreGeneric()選擇創建綁定的類。

約定確保接口和實現類必須具有相同的開放類型參數。例如。如果

interface IBar<T1, T2> 
interface IBaz<T> 
interface IFoo 
class Bar<T1, T2> : IBar<T1, T2>, IBaz<T1>, IFoo 
class Foo : IBar<int, int>, IFoo 

IBar<T1, T2>Bar<T1, T2>唯一有效的接口。但對於Foo,IBar<int, int>, IFoo都是有效的。

+0

好的,感謝您的快速回復(我會堅持使用Autofac) –

+0

現在可以使用Ninject 3.0.0-rc3 –

+0

感謝您的更新,什麼時候是3.0最終期限? –