您现在的位置是:首页 >

net开发框架有哪些 ASP.NET MVC 4框架揭秘:基于IoC的DependencyResolver(2)

火烧 2022-12-16 14:29:39 1064
ASP.NET MVC 4框架揭秘:基于IoC的De e de cyRe olver(2)    基于IoC的De e de cyRe olver( )  上面介绍的类型DefaultCo troll

ASP.NET MVC 4框架揭秘:基于IoC的DependencyResolver(2)  

     基于IoC的DependencyResolver( )

  上面介绍的类型DefaultControllerFactory IControllerActivator DefaultControllerActivator IDependencyResolver DefaultDependencyResolver和DependencyResolver之前的关系基本上可以通过如图 所示的类图来体现

  图   DefaultControllerFactory + ControllerActivator + DependencyResolver

  实例演示 创建基于Ninject的DependencyResolver(S )

  通过前面的介绍我们知道 当调用构造函数创建一个DefaultControllerFactory的时候 如果调用的时候默认无参构造函数 后者将作为参数的ControllerActivator对象设置为Null 那么默认请求用于激活Controller实例的是通过DependencyResolver类型的静态属性Current表示的DependencyResolver对象 换言之 我们可以通过自定义DependencyResolver的方式来实现基于IoC的Controller激活

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

  public class NinjectDependencyResolver : IDependencyResolver

  {

  public IKernel Kernel { get; private set; }

  public NinjectDependencyResolver()

  {

  this Kernel = new StandardKernel()

  }

  public void Register<TFrom TTo>() where TTo: TFrom

  {

  this Kernel Bind<TFrom>() To<TTo>()

  }

  public object GetService(Type serviceType)

  {

  return this Kernel TryGet(serviceType)

  }

net开发框架有哪些 ASP.NET MVC 4框架揭秘:基于IoC的DependencyResolver(2)

  public IEnumerable<object> GetServices(Type serviceType)

  {

  return this Kernel GetAll(serviceType)

  }

  }

  我们只需要创建一个自定义的NinjectDependencyResolver对象并将其作为当前的DependencyResolver即可 如下面的代码片段所示 我们创建了一个NinjectDependencyResolver对象并注册了IEmployeeRepository和EmployeeRepository之间的映射关系 然后调用DependencyResolver的静态方法SetResolver将创建的NinjectDependencyResolver注册为当前的DependencyResolver对象 再次运行我们的程序 依然会得到如图 所示的效果

  public class MvcApplication : System Web HttpApplication

  {

  //其他成员

  protected void Application_Start()

  {

  //其他操作

  NinjectDependencyResolver dependencyResolver =

  new NinjectDependencyResolver()

  dependencyResolver Register<IEmployeeRepository EmployeeRepository>()

  DependencyResolver SetResolver(dependencyResolver)

  }

  }

      返回目录ASP NET MVC 框架揭秘

      编辑推荐

      ASP NET开发培训视频教程

      Microsoft NET框架程序设计视频教程

       Java程序性能优化 让你的Java程序更快 更稳定

lishixinzhi/Article/program/net/201311/16064  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码