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)
        {
             // 写入你需要绑定的依赖注入关系,除了此方法之外的其它代码都是自动生成的,无须我们操心。

            //2011-10-26 新修复 bug,遗漏了后面的 InRequestScope(),这个很重要!

            //感谢  Scott Xu 南方小鬼  的指错:),差点误人子弟啊!

 

            kernel.Bind<ITestService>().To<TestService>().InRequestScope();

        }        
    }
}

 

测试代码如下: 

\Services\ITestService.cs

namespace MvcApplication3.Services
{
     public  interface ITestService
    {
         string GetMessage( string aString);
    }
}  

 

\Services\TestService.cs 

using System;

namespace MvcApplication3.Services
{
     public  class TestService : ITestService
    {
         string ITestService.GetMessage( string aString)
        {
             return  " -------------- " + (String.IsNullOrEmpty(aString) ? String.Empty : aString) +  " -------------- ";
        }
    }
}

 

\Controllers\HomeController.cs

using System.Web.Mvc;
using Ninject;
using MvcApplication3.Services;

namespace MvcApplication3.Controllers
{
     public  class HomeController : Controller
    {

        [Inject]
         public ITestService Service {  getset; }

         public ActionResult Index()
        {
            ViewBag.Message = Service.GetMessage( " Welcome to ASP.NET MVC! ");
             return View();
        }

         public ActionResult About()
        {
             return View();
        }

    }
}

 

在此基础上我们自己可以进行一些优化,从而使依赖注入使用起来更加方便, 更适合团队开发,

随便说一句 NuGet 真是不错,应该好好利用。

源码下载:Ninect.Mvc3_Demo.zip(环境:VS2010 SP1 + MVC3)


转载于:https://www.cnblogs.com/cnmaxu/archive/2011/10/25/2224375.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值