1

我有一个要使用 Ninject 的 MVC 4 应用程序。我已经将 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 接口用于单元测试。我知道在 RegisterServices 函数中我可以做到:

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

但是,这意味着我必须一次指定每个绑定。在之前的项目中,我们将 Ninject 配置为默认绑定到接口的新实例,只删除了接口类的 I。我已经查看了Using NInject to bind a generic interface,如果未设置泛型类型的绑定,则使用默认值但是我不确定 IService 的.InheritedFrom(typeof(IService<>))用途,以及我应该为我的配置使用什么.

关于如何使它工作的任何线索?

4

1 回答 1

2

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

在您的场景中,您可能会使用约定扩展并执行以下操作:

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

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

于 2012-09-05T13:27:32.130 回答