你的位置:首页 > ASP.net教程

[ASP.net教程]自己实现简单的AOP(四)自动初始化代理对象


 

前面三篇随笔,已经完成了AOP的核心功能,但 代理对象的初始化还是有些麻烦,本文将解决该问题。

 

Demo 片段如下: 

  public class HomeController : Controller  {    /// <summary>    /// 使用 Autowired Attribute 自动初始化代理对象    /// </summary>    [Autowired]    public Service myService { get; set; }    public ActionResult Index()    {      myService.Test();      var msg = myService.ErrorMsg;      Console.WriteLine(msg);      // 当然 ServiceException 中的 Code属性也可以存储在 ServiceAbstract 对象中      return View();    }  }

 

如上的代码片段中,myService 并未被赋值,而是被直接使用调用了Test方法。那么 该属性是什么时候被赋值的呢?

答案是:MVC框架、Controller激活的时候。

在 MVC框架中,Controller的激活是在 DefaultControllerFactory 中完成的,重写该类,并将其进行注册,便可实现,在激活Controller的同时也将自动初始化代理对象。

 

以下是、Global.asax 代码:

  // Note: For instructions on enabling IIS6 or IIS7 classic mode,   // visit http://go.microsoft.com/?LinkId=9394801  public class MvcApplication : System.Web.HttpApplication  {    protected void Application_Start()    {      // 注册新的Controller工厂      ControllerBuilder.Current.SetControllerFactory(new MyBatisControllerFactory());      AreaRegistration.RegisterAllAreas();      WebApiConfig.Register(GlobalConfiguration.Configuration);      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);      RouteConfig.RegisterRoutes(RouteTable.Routes);    }    private class MyBatisControllerFactory : DefaultControllerFactory    {      public override IController CreateController(RequestContext requestContext, string controllerName)      {        IController controller = base.CreateController(requestContext, controllerName);        /// 自动装配属性        /// <para>为属性对象启用代理,并延迟初始化被代理的对象</para>        DelayProxyUtil.AutowiredProperties(controller);        return controller;      }    }  }

 

附源码:http://files.cnblogs.com/files/08shiyan/AOPDemo.zip

 

(自己实现简单的AOP 暂完、后续进行补充)

 




怎样去法国旅游7月法国旅游法国旅游多少钱一人法国游费用法国旅游团购2015万绿谷漂流门票价格?河源万绿谷漂流什么时候结束? 河源万绿谷空中漂流一日游价格?万绿谷空中漂流包含门票吗? 广州到九连山新河漂流有多远?广州到连平九连山新河漂流多少公里? 广州到连平新河漂流怎么走?广州到新河漂流自驾游路线? 从化碧泉酒店房间价格?广州从化碧泉大酒店住宿攻略? 从化碧水湾温泉度假村简介?从化逸泉国际大酒店电话? 从化碧水湾温泉度假村怎么走?从化逸泉国际大酒店地址? 厦门鼓浪屿住宿有什么推荐的呢? 博鳌亚洲论坛要门票不?博鳌亚洲论坛会址景区凭本地身份证半价吗? 2015腾讯全球合作伙伴大会在哪举办?腾讯全球合作伙伴大会时间? 文昌到椰子大观园如何乘车?文昌坐车到椰子大观园怎么走? 文昌到椰子大观园有直达车吗?文昌到椰子大观园旅游线路? 越南娱乐篇 越南菜离不开“四大金刚” 超级完整版:菲律宾旅游攻略 回忆越南 滴滤式咖啡和柠檬朗姆的味道 ISL43L122IRZ-T Datasheet ISL43L122IRZ-T Datasheet ISL8118IRZ-T Datasheet ISL8118IRZ-T Datasheet ISL43L712IRZ-T Datasheet ISL43L712IRZ-T Datasheet 沈阳香港旅游报价 沈阳香港旅游报价 沈阳香港旅游报价 南京港澳游报价 南京港澳游报价 南京港澳游报价 四平去香港游报价 四平去香港游报价 四平去香港游报价