设为首页 加入收藏

TOP

MVC依赖性注入概述(二)
2019-09-03 03:25:30 】 浏览:31
Tags:MVC 依赖性 注入 概述
ow.Infrastructure {
public class NinjectDependenceyResolver : IDependencyResolver { private IKernel kernel; public NinjectDependenceyResolver() { kernel = new StandardKernel(); AddBindings(); } public object GetService(Type serviceType)//IDependencyResolver的方法 { return kernel.TryGet(serviceType); } public IEnumerable<object> GetServices(Type serviceType)//IDependencyResolver的方法 { return kernel.GetAll(serviceType); } private void AddBindings() { kernel.Bind<IEmailSender>().To<EmailSender>(); } } }

第二步:注册依赖解析器

通过注册依赖解析器来告诉MVC框架,用户希望使用自己的依赖解析器,那么在哪里注册呢,当然是在管理整个程序运行的地方注册-Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using DIShow.Infrastructure;

namespace DIShow
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            DependencyResolver.SetResolver(new NinjectDependenceyResolver());   
        }
    }
}

DependencyResolver.SetResolver(new NinjectDependenceyResolver())便实现了注册

通过以上两步DI容器的创建和注册就已经搞定了。


现在我们的这个小项目的依赖性注入就完全搞定了,我们来运行程序检测一下正确与否

image

事实说明是正确的。


最后我们还是来简单总结一下吧。

首先我们来梳理一下程序的运行过程:程序启动,根据路由系统我们到了HomeController,然后运行到HomeController构造函数的时候发现需要传入一个IEmailSender的实例化对象。这个时候程序回到Global当中,发现Global确实注册这样一件事,就是我们指定了怎样去实例化接口。通过我们的注册信息,我们找到了我们的DI容器,也就是NinjectDependenceyResolver类。然后我们在这个类里面传入一个类型给GetService,然后它通过查看我们的绑定信息,这个中介就发现我们是把IEmailSender绑定到EmailSender上面去的。于是就 实例化了EmailSender得到了一个对象,最后返回给了在HomeController中的构造函数中的参数sendEmail。于是后面就可以成功执行方法了。

然后我们来看一下实现这些过程主要做了那几步:

1.写出接口和实现类。

2.在控制器中只调用接口方法,不出现具体类

3.创建一个DI容器,将接口和具体类绑定

4.在Global中注册这个容器

就这样四步就搞定了。以后要是想要切换另一个发送程序,只需要在DI容器中将接口绑定到另一个实际类上就可以了,控制器不需要做任何修改。

 

好啦,我的分享就到此为止了,以后要是学到了更多有意思的东西还会和大家继续分享的。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spring.net中的IOC和DI-初使用 下一篇SVN:服务器资源删掉,本地添加时..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目