ASP.NETMVC3如何让依赖注入实现得更简单

本篇文章为大家展示了ASP.NET MVC 3如何让依赖注入实现得更简单,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联建站主要从事成都做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务息烽,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

我没有找到一个完整的示例,只有一些代码片断,于是,我将其整理了一翻,也有一点点个人的心得,拿出来,与大家分享一下,

如遇高人请不吝赐教,下面是代码片断。

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 成员           ///           /// 依赖注入容器          ///           private UnityContainer _unityContainer;           ///           /// 构造          ///           /// 依赖注入容器          public MyDependencyResolver( UnityContainer aUnityContainer )          {              _unityContainer = aUnityContainer;          }           public object GetService( Type aServiceType )          {              try             {                  return _unityContainer.Resolve( aServiceType );              }              catch             {   /// 按微软的要求,此方法,在没有解析到任何对象的情况下,必须返回 null,必须这么做!!!!                  return null;              }          }           public IEnumerable GetServices( Type aServiceType )          {              try             {                  return _unityContainer.ResolveAll( aServiceType );              }              catch             {    /// 按微软的要求,此方法,在没有解析到任何对象的情况下,必须返回空集合,必须这么做!!!!                  return new List( );              }          }           #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( );   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如何让依赖注入实现得更简单,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


新闻标题:ASP.NETMVC3如何让依赖注入实现得更简单
文章链接:http://abwzjs.com/article/jiddcd.html