在《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 : ResourceReader4: {6: }class LocalizableViewPage<TModel>: WebViewPage<TModel>public ResourceReader ResourceReader { get; set; }class HomeController : Controllerreturn View();1: @inherits LocalizableViewPage<object>head 4: title></ 5: </ 6: body 7: h2>@ResourceReader.GetString("HelloWorld") 9: >
我们采用基于URL的语言文化决定机制,即将语言文化的代码置于请求URL中来决定希望采用的语言。为此我们在自动生成的RouteConfig类型中注册了如下一个URL模板为“{culture}/{controller}/{action}”的路由对象。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。