ASP.NET MVC3 + Ninject.Mvc3 依賴注入原來可以這麼簡單

來源:互聯網
上載者:User

好久沒有寫文章了,懶。

今天收到一封郵件,是一位叫 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 { get; set; }

        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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.