Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Asp.Net Mvc3.0(MEF依赖注入实例)

Asp.Net Mvc3.0(MEF依赖注入实例)

作者头像
aehyok
发布于 2018-09-11 05:09:28
发布于 2018-09-11 05:09:28
67000
代码可运行
举报
文章被收录于专栏:技术博客技术博客
运行总次数:0
代码可运行

前言

https://cloud.tencent.com/developer/article/1395151前面一节主要是对MEF进行简单的介绍。本节主要来介绍如何在Asp.Net Mvc3.0中使用MEF。

准备工作

 首先建立一个Asp.Net Mvc3.0的Web项目。然后建立一个业务逻辑处理的类库项目。

在MEF.Repository类库项目中建立一个ITestRepository的接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace MEF.Repository
{
    public interface ITestRepository
    {
        string GetTestString();
    }
}

以及它的一个实现类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [Export(typeof(ITestRepository))]
    public class TestRepository:ITestRepository
    {
        public string GetTestString()
        {
            return "Hello World";
        }
    }

可以看到我们已经为其标记了Export的导出属性,它的类型为上面声明的接口ITestRepository。

记得还需要引用命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.ComponentModel.Composition;

实现MEF的注入工作

 步骤大概分为四步

第一步:发现部件---这种方式是通过读取当前程序下的dll文件中的部件

第二步:为第一步中获取到的部件创建一个CompositionContainer实例

第三步:实现IDependencyResolver接口

第四步:注册到DependencyResolver

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            //设置MEF依赖注入容器
            DirectoryCatalog catalog = new DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath);
            MefDependencySolver solver = new MefDependencySolver(catalog);
            DependencyResolver.SetResolver(solver);

这是在Global.asax文件下的Application_Start方法执行的文件,里面有一个自定义的MefDependencySolver

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MefDependencySolver : IDependencyResolver
    {
        private readonly ComposablePartCatalog _catalog;
        private const string MefContainerKey = "MefContainerKey";

        public MefDependencySolver(ComposablePartCatalog catalog)
        {
            _catalog = catalog;
        }

        public CompositionContainer Container
        {
            get
            {
                if (!HttpContext.Current.Items.Contains(MefContainerKey))
                {
                    HttpContext.Current.Items.Add(MefContainerKey, new CompositionContainer(_catalog));
                }
                CompositionContainer container = (CompositionContainer)HttpContext.Current.Items[MefContainerKey];
                HttpContext.Current.Application["Container"] = container;
                return container;
            }
        }

        public object GetService(Type serviceType)
        {
            string contractName = AttributedModelServices.GetContractName(serviceType);
            return Container.GetExportedValueOrDefault<object>(contractName);
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            return Container.GetExportedValues<object>(serviceType.FullName);
        }
    }
}

里面定义创建了CompositionContainer对象实例,并继承接口IDependencyResolver实现方法

并最终完成注册到DependencyResolver。

接下来就是需要实现调用了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [Export]
    public class HomeController : Controller
    {
        [Import]
        public ITestRepository Repository { get; set; }
        
        public ActionResult Index()
        {
            Repository.GetTestString();
            ViewBag.Message = "Welcome to ASP.NET MVC!" + Repository.GetTestString();

            return View();
        }

就是为需要的部件进行属性的标注

通过依赖注入的实现的确找到了该调用的实例。并查看最终的运行效果。

总结

 自己感觉很不错,希望能应用到实际的开发项目中。

简单的实例代码下载地址 http://pan.baidu.com/share/link?shareid=224012114&uk=4244870074

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-10-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
什么是依赖注入     依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型如下: namespace Pattern.DI.MVC.Models { public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price {
小白哥哥
2018/03/07
2.4K0
ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
在ASP.NET MVC中使用Unity进行依赖注入的三种方式第一种方法第二种方法第三种方法
     在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的Controller,让Controller依赖于ModelRepository的抽象而不是它的实现。      我们可以在三个阶段使用IoC实现上面所说的解耦操作,首先需要简单介绍一下默认情况下Controller的激活过程: 用户发送请求黑ASP.NET,路由系统对请求进行解析,根据注册的路由规则对请求进行匹配,解析出Controller和A
小白哥哥
2018/03/07
1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/releases得到最新版本的Unity现在。 这里http://unity.codeplex.com/documentation我们找到了帮助文档大家可以下载下来看看 当然,如果您在您的visual studio 中安装了Nuget 包管理器,你可以直接在Nuget中获取到最新版本的Unity。 我们采用的是构造
用户1149182
2018/01/16
8640
ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
使用 Castle Windsor 实现 Web API 依赖注入
Web API 定义了依赖注入的接口 IDependencyResolver , 定义如下:
beginor
2020/08/10
8950
ASP.NET MVC Controller激活系统详解:IoC的应用[下篇]
[上篇]除了通过自定义ControllerFactory的方式引入IoC之外,在使用默认DefaultControllerFactory情况下也可以通过一些扩展使基于IoC的Controller激活成为可能。主要的方式就是自定义ControllerActivator和 DependencyResolver。 四、ControllerActivator V.S. DependencyResolver 如下面的代码片断所示,DefaultControllerFactory具有两个构造函数重载,其中一个具有一个类
蒋金楠
2018/01/15
7930
ASP.NET MVC Controller激活系统详解:IoC的应用[下篇]
全面理解 ASP.NET Core 依赖注入
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚。另外再介绍一下.NET  Core的DI实现以及对实例生命周期的管理(这个是经常面试会问到的问题)。最后再给大家简单介绍一下在控制台以及Mvc下如何使用DI,以及如何把默认的Service Container 替换成Autofac。 我录了一些关于ASP.NET Core的入门视频:有兴趣的同学可以去看看。 http://www.cnblogs.com/jesse
用户1153966
2018/03/14
2.4K0
全面理解 ASP.NET Core 依赖注入
Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html
aehyok
2018/08/31
8160
Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver
ASP.NET MVC的Razor引擎:IoC在View激活过程中的应用
在《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的Depen
蒋金楠
2018/01/15
1.1K0
ASP.NET MVC的Razor引擎:IoC在View激活过程中的应用
ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
Action方法的执行具有两种基本的形式,即同步执行和异步执行,而在ASP.NETMVC的整个体系中涉及到很多同步/异步的执行方式,虽然在前面相应的文章中已经对此作了相应的介绍,为了让读者对此有一个整
蒋金楠
2018/01/15
9080
ASP.NET MVC实现依赖注入
在java的spring中有自动注入功能,使得代码变得更加简洁灵活,所以想把这个功能移植到c#中,接下来逐步分析实现过程
code2roc
2023/07/19
3810
ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)
GuZhenYin
2018/01/04
2.1K0
ASP.NET Core 依赖注入
一、什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control),DI等概念搞晕。 1.1依赖 当一个类需要另一个类协作来完成工作的时候就产生了依赖。比如我们在AccountController这个控制器需要完成和用户相关的注册、登录 等事情。其中的登录我们由EF结合Idnetity来完成,所以我们封装了一个EFLoginService。这里AccountControlle
牛嗷嗷
2018/03/30
1.9K0
ASP.NET MVC的Razor引擎:RazorView
Razor引擎具有两个核心的类型,一个是表示View本身的类型RazorView,另一个则是获取和创建它的RazorViewEngine,我们将用两篇文章对它们分别进行剖析。Razor引擎下的View
蒋金楠
2018/01/15
1.4K0
ASP.NET MVC的Razor引擎:RazorView
ASP.NET Core应用基本编程模式[2]:依赖注入
基于IHostBuilder/IHost的服务承载系统建立在依赖注入框架之上,它在服务承载过程中依赖的服务(包括作为宿主的IHost对象)都由代表依赖注入容器的IServiceProvider对象提供。在定义承载服务时,也可以采用依赖注入方式来消费它所依赖的服务。作为依赖注入容器的IServiceProvider对象能否提供我们需要的服务实例,取决于相应的服务注册是否预先添加到依赖注入框架中。服务注册可以通过调用IHostBuilder接口或者IWebHostBuilder接口相应的方法来完成,前者在《服务承载系统》已经有详细介绍,下面介绍基于IWebHostBuilder接口的服务注册。[本文节选自《ASP.NET Core 3框架揭秘》第11章, 更多关于ASP.NET Core的文章请点这里]
蒋金楠
2020/11/13
1.1K0
ASP.NET Core应用基本编程模式[2]:依赖注入
ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面。在ASP.NET Core应用中基于依赖注入的编程主要涉及到两个方面,它们分别是将服务注册到ServiceCollection中,和采用注入的方式利用ServiceProvider提供我们所需的服务。我们先来讨论ASP.NET Core应用中如何进行服务注册。[本文已经同步到《ASP.NET Core框架揭秘》之中] 目录 一
蒋金楠
2018/02/08
1.8K0
ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
上一篇《一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)》,我们完成了:
Rector
2018/01/30
9880
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
IoC在ASP.NET Web API中的应用
控制反转(Inversion of Control,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的
蒋金楠
2018/01/15
1.9K0
IoC在ASP.NET Web API中的应用
ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件
上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Dependen
用户1149182
2018/01/16
7480
ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件
Asp.Net Mvc3.0(MEF依赖注入理论)
Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等。MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要求定义一些扩展点,之后扩展人员就可以使用这些扩展点与应用程序交互;同时MEF让应用程序与扩展程序之间不产生直接的依赖,这样也允许在多个具有同样的扩展需求之间共享扩展程序。
aehyok
2018/09/11
7190
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar]
Rector
2018/02/02
1.8K0
推荐阅读
相关推荐
ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验