Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Ninject.MVC3在测试项目中添加绑定_Asp.net_Asp.net Mvc 3_Ninject - Fatal编程技术网

Asp.net 使用Ninject.MVC3在测试项目中添加绑定

Asp.net 使用Ninject.MVC3在测试项目中添加绑定,asp.net,asp.net-mvc-3,ninject,Asp.net,Asp.net Mvc 3,Ninject,现在我很难弄清楚Ninject和ASP.NET MVC 3的最佳方法是什么 我在应用程序上使用了安装包Ninject.MVC3,并使用以下方法创建了引导类: public static void Start() public static void Stop() private static IKernel CreateKernel() private static void RegisterServices(IKernel kernel) 这一切都很好,它按预期加载了我的模块。但从历史上看

现在我很难弄清楚Ninject和ASP.NET MVC 3的最佳方法是什么

我在应用程序上使用了
安装包Ninject.MVC3
,并使用以下方法创建了引导类:

public static void Start() 
public static void Stop()
private static IKernel CreateKernel()
private static void RegisterServices(IKernel kernel)
这一切都很好,它按预期加载了我的模块。但从历史上看,我所做的是这样的:

MyApp.dll 但是在
Nuget
包中没有一种方法可以通过原始库中的
App\u Start
类来实现这一点。如果我在我的测试应用程序中放入另一个Ninject引导类,它似乎只准备构建一个新内核:

[assembly: WebActivator.PreApplicationStartMethod(typeof(TestNinjectBootstrapper), "Configure")]
我可以静态地将内核存储在原始引导程序中,并从测试项目调用,但这感觉是错误的。我是不是想得太多,错过了什么?或者思考太少:)


啊。什么是好方法?

要在不同的项目中重用接口/类映射注册,可以创建NInject模块。模块只需要实现INinjectModule接口,但为了简单起见,大多数模块应该扩展NinjectModule类

因此,您可以在模块内放置接口/类映射,如以下示例所示:

public class WarriorModule : NinjectModule
{
    public override void Load() 
    {
        Bind<IWeapon>().To<Sword>();
        Bind<Samurai>().ToSelf().InSingletonScope();
    }
}
注意,您可以使用多个模块创建和实例化内核

因此,模块将帮助您重用默认映射配置。映射配置将在一个地方定义,这将简化维护,特别是当有多个项目使用相同的接口/类映射配置时


还有一些其他功能,如“动态模块加载”等。可以找到有关模块的更多信息。

您找到解决方案了吗?
[assembly: WebActivator.PreApplicationStartMethod(typeof(TestNinjectBootstrapper), "Configure")]
public class WarriorModule : NinjectModule
{
    public override void Load() 
    {
        Bind<IWeapon>().To<Sword>();
        Bind<Samurai>().ToSelf().InSingletonScope();
    }
}
IKernel kernel = new StandardKernel(new WarriorModule());