我有一个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是什么,以及我应该使用什么来配置。
有关如何使其正常工作的任何线索?
答案 0 :(得分:2)
InheritedFrom(typeof(IService<>))
过滤SelectAllClasses()
返回的类型(程序集中的所有类型),仅包含IService<Something>
类型。
在您的场景中,您可以使用约定扩展并执行:
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses()
.BindDefaultInterface());
BindDefaultInterface
假定您描述的命名约定(这是常见的):例如Foo
绑定IFoo
。