2012-09-05 39 views
1

我有一個我想使用Ninject的MVC 4應用程序。我使用NuGet作爲Ninject 3軟件包,但是我在配置上遇到了一些困難。 NuGet安裝創建了以下文件:Ninject 3.0和MVC4通用綁定

public static class NinjectWebCommon 
{ 
    // Not included for brevity 

    /// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 

    } 
} 

我有一個類用於強類型的web配置。我已經調用了這個類AppEnvironment,並且它具有用於單元測試的IAppEnvironment接口。我知道在我可以做RegisterSevices功能:

kernel.Bind<IAppEnvironment>().To<AppEnvironment>(); 

但是這意味着我必須指定每個綁定一次。在之前的項目中,我們將Ninject配置爲僅在刪除接口類的I時將其默認綁定到接口的新實例。我看了一下Using NInject to bind a generic interface, with a default if a binding for the generic type is not set但是我不確定.InheritedFrom(typeof(IService<>))中的IService是什麼,以及我應該使用什麼來進行配置。

任何關於如何使這項工作的線索?

回答

2

InheritedFrom(typeof(IService<>))SelectAllClasses()(程序集中的所有類型)返回的類型過濾爲僅包含IService<Something>的類型。

在你的情況,你可能會使用常規的擴展和做:

kernel.Bind(x => x.FromThisAssembly() 
        .SelectAllClasses() 
        .BindDefaultInterface()); 

BindDefaultInterface假定您所描述的命名規則(這是常見的):例如Foo綁定到IFoo

+0

我實際上只是自己想出了這個(通常是它的方式)。我還有第二個問題令人困惑。界面和類都在一個單獨的項目中,所以沒有被'FromThisAssembly'拾起,我不得不做'FromAssembliesMatching'。 –