加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC的Razor引擎:IoC在View激活过程中的应用

发布时间:2020-12-16 09:09:36 所属栏目:asp.Net 来源:网络整理
导读:在《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的DependencyResolver来完成对目标View的激活,这意味着我们可以通过注册自定义DependencyResolver的方式实现基于IoC的View激

在《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的DependencyResolver来完成对目标View的激活,这意味着我们可以通过注册自定义DependencyResolver的方式实现基于IoC的View激活。本篇文章中我们将演示如何通过自定义View的方式实现与IoC框架Ninject的集成。[本文已经同步到《How ASP.NET MVC Works?》中]

我们定义了一个具有如下定义的NinjectDependencyResolver,它具有一个IKernel类型的只读属性Kernel,该属性在构造函数中被初始化为一个StandardKernel对象。对于实现的GetService和GetServices方法,我们直接调用Kernel的TryGet和GetAll返回指定类型的实例和实例列表。为了方便进行类型映射,我们定义了泛型的Register<TFrom,TTo>方法。

   1: public class NinjectDependencyResolver : IDependencyResolver
   3:     public IKernel Kernel { get; private set; }
   5:     {
   7:     }
   9:     {
  11:     }
  13:     {
  15:     }
  17:     {
  19:     }
    
string GetString(string name);
class DefaultResourceReader : ResourceReader
   4:     {
   6:     }
class LocalizableViewPage<TModel>: WebViewPage<TModel>
public ResourceReader ResourceReader { get;  set; }
class HomeController : Controller
return View();
   1: @inherits LocalizableViewPage<object>
head   4:         title></   5:     </   6:     body   7:         h2>@ResourceReader.GetString("HelloWorld")   9: >

我们采用基于URL的语言文化决定机制,即将语言文化的代码置于请求URL中来决定希望采用的语言。为此我们在自动生成的RouteConfig类型中注册了如下一个URL模板为“{culture}/{controller}/{action}”的路由对象。

static void RegisterRoutes(RouteCollection routes)
   6:         routes.MapRoute(
   8:             url         : "{culture}/{controller}/{action}",
  10:             culture        = "zh-CN",1)" id="lnum11">  11:             controller     = "Home",1)" id="lnum12">  12:             action         = "Index"}
  14:     }
class MvcApplication : System.Web.HttpApplication
   6:         NinjectDependencyResolver dependencyResovler = new NinjectDependencyResolver();
   8:         DependencyResolver.SetResolver(dependencyResovler);
  10:? 
  12:     { 
string culture = RouteTable.Routes.GetRouteData(contextWrapper).Values["culture"] as string;
  16:         {
  18:             {
  20:                 Thread.CurrentThread.CurrentCulture     = cultureInfo;
  22:             }
  24:         }
  26: }

现在运行我们的程序,并通过地址指定采用的语言文化,我们可以发现呈选出来的内容与你指定的语言文化是一致的,具体的输出效果如下图所示。

ASP.NET MVC的Razor引擎:View编译原理
ASP.NET MVC的Razor引擎:RazorView
ASP.NET MVC的Razor引擎:IoC在View激活过程中的应用
ASP.NET MVC的Razor引擎:RazorViewEngine

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读