【MVC整理】1.使用 StructureMap 作為 ASP.NET MVC 的 DI 架構

來源:互聯網
上載者:User

StructureMap 是一個非常靈巧的IOC架構,與asp.net MVC 更是很好的整合。

準備:

下載StructureMap,基本執行個體中只需要引用StructureMap.dll檔案,並引用命名空間StructureMap
下面是我們需要使用IoC的範例程式碼,我們要建立TestController,希望通過IoC為TestController的建構函式提供Ants.Provider.ICacheProvider的執行個體對象。

Step1:

用StructureMapControllerFactory代替預設的DefaultControllerFactory,以及StructureMap的初始化,並在Application_Start()進行註冊。

1.StructureMapControllerFactory代替預設的DefaultControllerFactory以及StructureMap的初始化

using System;using System.Web.Mvc;using StructureMap;namespace MvcWeb.Ioc{    //用StructureMap接管MVC中的Controller的建立工作    public class StructureMapControllerFactory : DefaultControllerFactory    {        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)        {            if (controllerType == null) return null;            try            {                return ObjectFactory.GetInstance(controllerType) as Controller;            }            catch (StructureMapException)            {                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());                throw;            }        }           }    //初始化StructureMap,注入相關對象    public class StructureMapInitialize    {        public static void Initialize()        {            ObjectFactory.Initialize(                x => {                    x.For<Ants.Provider.IAuthenticateProvider>().Singleton().Use<Ants.Provider.CustomAuthenticateProvider>();                    x.For<Ants.Provider.ICacheProvider>().Singleton().Use<Ants.Provider.AspNetCacheProvider>();                                   }                );        }            } }

2.在Application_Start()進行註冊

protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            RegisterRoutes(RouteTable.Routes);            //初始化StructureMap            MvcWeb.Ioc.StructureMapInitialize.Initialize();            //註冊StructureMapControllerFactory以代替DefaultControllerFactory            ControllerBuilder.Current.SetControllerFactory(new MvcWeb.Ioc.StructureMapControllerFactory());         }

Step2:構建TestControler

using System.Web.Mvc;namespace MvcWeb.Controllers{        [HandleError]    public class TestController : Controller    {        //_cache將會被自動注入        private readonly Ants.Provider.ICacheProvider _cache;        public TestController(Ants.Provider.ICacheProvider cache)        {            this._cache = cache;        }        /**********************************************        Test/Cache        **********************************************/        public ActionResult Cache()        {            _cache.Insert("test", "Hello Word");            return Content(_cache.Get("test").ToString());        }    }}

Step3:直接瀏覽Test/Cache 就可以看到成功的顯示“Hello World”.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.