ASP.NET MVC3 + Ninject.Mvc3 依赖注入原来可以这么简单
好久没有写文章了,懒。
今天收到一封邮件,是一位叫 HMQ 的同人,对我写过的 ASP.NET MVC3 依赖注入 的文章提出了问题,
当时我写这篇文章的时候,正式的 MVC3 版本还没有出来,当时我用的是 MVC3 Beta 版,而现在 MVC4 都快出来了,
因此这个 Demo 在当时的环境下是测试通过的,没有问题,而在现在的环境下可能会有问题(本人没有测试过),
如果哪天有时间,我会把这个 Demo 拿下来,进行适当的修改,让它适合当前的 MVC3 版本,不过话又说回来我觉得没有太大必要,
因为现在想在 ASP.NET MVC3 中使用依赖注入非常的简单,几乎用不了几行代码就可以实现依赖注入,我推荐使用 Ninject,
具体步骤如下:
第一步、新创建一个 ASP.NET MVC3 工程。
第二步、通过 NuGet 控制台直接输入命令:install-package Ninject.Mvc3
安装完这个源码包之后,所有的依赖注入框架已设置完成,无须你改动任何代码,
你会发现项目中添加了一个“App_Start”文件夹,在这个文件夹中生成了一个名为“NinjectMVC3.cs”的代码文件。
第三步、打开 \App_Start\NinjectMVC3.cs,找到 RegisterServices 方法,将你的依赖注入映射代码直接写入即可。
代码清单如下:
自动生成的 \App_Start\NinjectMVC3.cs代码:
[assembly: WebActivator.PreApplicationStartMethod(typeof(MvcApplication3.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(MvcApplication3.App_Start.NinjectMVC3), "Stop")]
namespace MvcApplication3.App_Start
{
using System.Reflection;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Mvc;
using MvcApplication3.Services;
{
public static class NinjectMVC3
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
//写入你需要绑定的依赖注入关系,除了此方法之外的其它代码都是自动生成的,无须我们操心。
kernel.Bind<ITestService>().To<TestService>();
}
}
}
测试代码如下:
\Services\ITestService.cs
namespace MvcApplication3.Services
{
public inte易做图ce ITestService
{
string GetMessage(string aString);
}
}
\Services\TestService.cs
using System;
namespace MvcApplication3.Services
{
public class TestService : ITestService
{
string ITestService.GetMessage(string aString)
 
补充:Web开发 , ASP.Net ,