Ninject 3.0和MVC4 Generic Binding

时间:2012-09-05 13:02:54

标签: c# asp.net-mvc ninject

我有一个MVC 4应用程序,我想使用Ninject。我已经将NuGet用于Ninject 3软件包,但是我在配置方面遇到了一些困难。 NuGet安装创建了文件:

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)
    {

    }
}

我有一个我用来强力输入我的网络配置的课程。我称之为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是什么,以及我应该使用什么来配置。

有关如何使其正常工作的任何线索?

1 个答案:

答案 0 :(得分:2)

InheritedFrom(typeof(IService<>))过滤SelectAllClasses()返回的类型(程序集中的所有类型),仅包含IService<Something>类型。

在您的场景中,您可以使用约定扩展并执行:

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

BindDefaultInterface假定您描述的命名约定(这是常见的):例如Foo绑定IFoo

相关问题