1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Asp.Net Mvc3.0(MEF依赖注入实例)

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

时间:2019-08-18 01:48:56

相关推荐

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

前言

在/aehyok/p/3386650.html前面一节主要是对MEF进行简单的介绍。本节主要来介绍如何在 Mvc3.0中使用MEF。

准备工作

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

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

namespace MEF.Repository{public interface ITestRepository{string GetTestString();}}

以及它的一个实现类

[Export(typeof(ITestRepository))]public class TestRepository:ITestRepository{public string GetTestString(){return "Hello World";}}

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

记得还需要引用命名空间

using position;

实现MEF的注入工作

步骤大概分为四步

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

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

第三步:实现IDependencyResolver接口

第四步:注册到DependencyResolver

//设置MEF依赖注入容器DirectoryCatalog catalog = new DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath);MefDependencySolver solver = new MefDependencySolver(catalog);DependencyResolver.SetResolver(solver);

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

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。

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

[Export]public class HomeController : Controller{[Import]public ITestRepository Repository { get; set; }public ActionResult Index(){Repository.GetTestString();ViewBag.Message = "Welcome to MVC!" + Repository.GetTestString();return View();}

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

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

总结

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

简单的实例代码下载地址/share/link?shareid=224012114&uk=4244870074

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。