在《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>方法。
class NinjectDependencyResolver : IDependencyResolver
2: {
private set; }
public NinjectDependencyResolver()
5: {
new StandardKernel();
7: }
where TTo: TFrom
9: {
this.Kernel.Bind<TFrom>().To<TTo>();
11: }
object GetService(Type serviceType)
13: {
this.Kernel.TryGet(serviceType);
15: }
object> GetServices(Type serviceType)
17: {
this.Kernel.GetAll(serviceType);
19: }
20: }