Asp.net MVC源码分析--Asp.net MVC与Ninject.MVC集成分析

来源:未知 责任编辑:智问网络 发表时间:2013-10-07 01:00 点击:

 

在之前的文章中我们分析了DependencyResolver 与Service location. 可以利用DependencyResolver 来注册我们自己的IResolver实现,从而改变框架的行为.在Niject.MVC 中正是利用这个机制来实现了一套Service location机制,来创建Controller.

Niject.MVC 源码的下载地址是: https://github.com/ninject/ninject.web.mvc

------------------------------------------------------------------------------------------

首先我们找到NinjectMVC3.cs 文件,所有引入Niject.MVC dll 的asp.net MVC项目都需要这个类

 

 1 #if NUGET

 2 [assembly: WebActivator.PreApplicationStartMethod(typeof(SampleApplication.App_Start.NinjectMVC3), "Start")]

 3 [assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(SampleApplication.App_Start.NinjectMVC3), "Stop")]

 4

 5 namespace SampleApplication.App_Start

 6 {

 7     using System.Reflection;

 8     using Microsoft.Web.Infrastructure.DynamicModuleHelper;

 9     using Ninject;

10     using Ninject.Web.Mvc;

11

12     public static class NinjectMVC3

13     {

14         private static readonly Bootstrapper bootstrapper = new Bootstrapper();

15

16         /// <summary>

17 /// Starts the application

18 /// </summary>

19         public static void Start()

20         {

21             DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));

22             DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));

23             bootstrapper.Initialize(CreateKernel);

24         }

25        

26         /// <summary>

27 /// Stops the application.

28 /// </summary>

29         public static void Stop()

30         {

31             bootstrapper.ShutDown();

32         }

33        

34         /// <summary>

35 /// Creates the kernel that will manage your application.

36 /// </summary>

37 /// <returns>The created kernel.</returns>

38         private static IKernel CreateKernel()

39         {

40             var kernel = new StandardKernel();

41             RegisterServices(kernel);

42             return kernel;

43         }

44

45         /// <summary>

46 /// Load your modules or register your services here!

47 /// </summary>

48 /// <param name="kernel">The kernel.</param>

49         private static void RegisterServices(IKernel kernel)

50         {

51             kernel.Load(Assembly.GetExecutingAssembly());

52         }        

53     }

54 }

55 #endif

我们看到当Assembly 加载后会调用WebActivator 的StartMethod方法来,启动NinjectMVC3.Start方法这个方法中调用了bootstrapper.Initialize方法.

www.2cto.com

在这Initialize方法中向kernel容器注入了很多接口的实现.并且向DependencyResolver中注册了Ninject的IDependencyResolver实现

DependencyResolver.SetResolver(CreateDependencyResolver());

最后我们就可以向Ninject注入所有MVC 框架中依赖DependencyResolver获取接口的实现.

并且当我们的Controller 的构造函数中有接口参数,并且在Ninject有注册的话,也可以顺利的创建Controller的参数中的接口(因为所有Controller的创建都通过Ninject),这样我们就可以把Controller中的一些业务行为抽取出来创建独立的类(业务层),从而划分出更清晰的类的层次结构和设计.

例如:

 

这时只要我们在Application_Strat 中向Iinject容器中注册IAccountManager 的实现AccountController就可以使用了.

 

摘自 十一月的雨

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • asp.net 设置GridView的选中行的实现代码
    • C#高级编程:数据库连接[1]
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET&#160;GridView列表代码示例
    • Asp.net MVC源码分析--Action Filter的链式调用
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1