您好,登錄后才能下訂單哦!
本篇文章為大家展示了ASP.NET MVC 3如何讓依賴注入實現得更簡單,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
我沒有找到一個完整的示例,只有一些代碼片斷,于是,我將其整理了一翻,也有一點點個人的心得,拿出來,與大家分享一下,
如遇高人請不吝賜教,下面是代碼片斷。
1、實現 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> /// 構造 /// </summary> /// <param name="aUnityContainer">依賴注入容器</param> public MyDependencyResolver( UnityContainer aUnityContainer ) { _unityContainer = aUnityContainer; } public object GetService( Type aServiceType ) { try { return _unityContainer.Resolve( aServiceType ); } catch { /// 按微軟的要求,此方法,在沒有解析到任何對象的情況下,必須返回 null,必須這么做!!!! return null; } } public IEnumerable<object> GetServices( Type aServiceType ) { try { return _unityContainer.ResolveAll( aServiceType ); } catch { /// 按微軟的要求,此方法,在沒有解析到任何對象的情況下,必須返回空集合,必須這么做!!!! return new List<object>( ); } } #endregion } }
2、在 Global.asax.cs 中設置依賴注入解析器 DependencyResolver (這是一個全局靜態類,也是 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 ); //設置依賴注入 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 版,將來正式版出來了,未必采用這種方式來實現,畢竟對于依賴注入這塊,
從 MVC1 -> MVC3 Preview1 -> MVC3 Beta 一直都在變化。
上述內容就是ASP.NET MVC 3如何讓依賴注入實現得更簡單,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。