本篇文章为大家展示了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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。