溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET MVC 3如何讓依賴注入實(shí)現(xiàn)得更簡(jiǎn)單

發(fā)布時(shí)間:2021-11-24 13:12:43 來(lái)源:億速云 閱讀:116 作者:柒染 欄目:編程語(yǔ)言

本篇文章為大家展示了ASP.NET MVC 3如何讓依賴注入實(shí)現(xiàn)得更簡(jiǎn)單,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

我沒(méi)有找到一個(gè)完整的示例,只有一些代碼片斷,于是,我將其整理了一翻,也有一點(diǎn)點(diǎn)個(gè)人的心得,拿出來(lái),與大家分享一下,

如遇高人請(qǐng)不吝賜教,下面是代碼片斷。

1、實(shí)現(xiàn) MVC3 Beta 中提供的依賴注入接口 IDependencyResolver ,MyDependencyResolver.cs 的代碼:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Web.Mvc;  using Microsoft.Practices.Unity;   namespace Demo  {      public class MyDependencyResolver : IDependencyResolver      {          #region IDependencyResolver 成員           /// <summary>          /// 依賴注入容器          /// </summary>          private UnityContainer _unityContainer;           /// <summary>          /// 構(gòu)造          /// </summary>          /// <param name="aUnityContainer">依賴注入容器</param>          public MyDependencyResolver( UnityContainer aUnityContainer )          {              _unityContainer = aUnityContainer;          }           public object GetService( Type aServiceType )          {              try             {                  return _unityContainer.Resolve( aServiceType );              }              catch             {   /// 按微軟的要求,此方法,在沒(méi)有解析到任何對(duì)象的情況下,必須返回 null,必須這么做?。。?!                  return null;              }          }           public IEnumerable<object> GetServices( Type aServiceType )          {              try             {                  return _unityContainer.ResolveAll( aServiceType );              }              catch             {    /// 按微軟的要求,此方法,在沒(méi)有解析到任何對(duì)象的情況下,必須返回空集合,必須這么做!?。?!                  return new List<object>( );              }          }           #endregion      }   }

2、在 Global.asax.cs 中設(shè)置依賴注入解析器  DependencyResolver (這是一個(gè)全局靜態(tài)類(lèi),也是 MVC3 Beta 新增的):

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Web.Mvc;  using System.Web.Routing;  using Microsoft.Practices.Unity;   namespace Demo  {      // Note: For instructions on enabling IIS6 or IIS7 classic mode,       // visit http://go.microsoft.com/?LinkId=9394801       public class MvcApplication : System.Web.HttpApplication      {   public static void RegisterGlobalFilters( GlobalFilterCollection filters )          {              filters.Add( new HandleErrorAttribute( ) );          }           public static void RegisterRoutes( RouteCollection routes )          {              routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );               routes.MapRoute(                  "Default", // Route name                  "{controller}/{action}/{id}", // URL with parameters  new { controller = "Home", action = "Index", id = UrlParameter.Optional }              );           }           protected void Application_Start( )          {              AreaRegistration.RegisterAllAreas( );               RegisterGlobalFilters( GlobalFilters.Filters );              RegisterRoutes( RouteTable.Routes );              //設(shè)置依賴注入              RegisterDependency( );          }           private static UnityContainer _Container;          public static UnityContainer Container          {              get             {                  if ( _Container == null )                  {                      _Container = new UnityContainer( );                  }                  return _Container;              }          }           protected void RegisterDependency( )          {              Container.RegisterType<ITest, Test>( );   DependencyResolver.SetResolver( new MyDependencyResolver( Container ) );          }      }  }

3、Controller的代碼,HomeController.cs:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Web.Mvc;  using Microsoft.Practices.Unity;   namespace Demo.Controllers  {   public class HomeController : Controller      {          [Dependency]          public ITest Test { get; set; }                    public ActionResult Index( )          {     ViewModel.Message = Test.GetString( );               return View( );          }           public ActionResult About( )          {              return View( );          }      }  }

4、ITest.cs代碼:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;   namespace Demo  {      public interface ITest      {          string GetString( );      }  }

5、Test.cs代碼:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;   namespace Demo  {      public class Test:ITest      {          #region ITest 成員           public string GetString( )          {              return "Run demo!";          }           #endregion      }  }

***** 注意,這篇文章只適用于 ASP.NET MVC3 Beta 版,將來(lái)正式版出來(lái)了,未必采用這種方式來(lái)實(shí)現(xiàn),畢竟對(duì)于依賴注入這塊,

從 MVC1 -> MVC3 Preview1 -> MVC3 Beta 一直都在變化。

上述內(nèi)容就是ASP.NET MVC 3如何讓依賴注入實(shí)現(xiàn)得更簡(jiǎn)單,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI