前言

在使用PRISM+WPF开发项目的过程中,需要使用​​AutoMapper​​​实现对象-对象的映射功能。无奈PRISM没有相关对​​AutoMapper​​​相关的类库,于是转换一下思想,在nuget 中存在有关使用​​Microsoft.Extensions.DependencyInjection​​​来实现​​AutoMapper​​​的依赖注入方法,那能不能将​​DryIoc​​​和​​Microsoft.Extensions.DependencyInjection​​一起使用来实现依赖注入的功能呢?通过在网上搜索,发现痕迹大佬实现了【WPF Prism8.0中注册Nlog日志服务】。

依据痕迹大佬的文章引导,在PRISM+WPF项目中实现了对​​AutoMapper​​的依赖注入功能。

一、新建PRISM框架的项目

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_microsoft

二、选择注入框架的时候一定要选择DryIoc框架。

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_microsoft_02

三、添加nuget包

需要在主项目中添加以下四个nuget包,包名如下:

DryIoc.Microsoft.DependencyInjectionMicrosoft.Extensions.DependencyInjectionAutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection


我在项目中添加的版本如下图所示:Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_html_03

四、在App.xaml.cs中添加函数:CreateContainerExtension

具体实现如下:​​ClassA​​和​​ClassB​​是在其他项目中定义的两个类。

/// <summary>/// Create a new <see cref="T:Prism.DryIoc.DryIocContainerExtension" /> used by Prism./// </summary>/// <returns>A new <see cref="T:Prism.DryIoc.DryIocContainerExtension" />.</returns>protected override IContainerExtension CreateContainerExtension(){   var serviceCollection = new ServiceCollection();   serviceCollection.AddAutoMapper(cfg =>   {     cfg.CreateMap<ClassA,ClassB>();   });   return new DryIocContainerExtension(new Container(CreateContainerRules()).WithDependencyInjectionAdapter(serviceCollection));}


这样就可以了。在需要使用​​AutoMapper​​的项目中需要添加上​​AutoMapper​​的nuget引用。然后就可以在具体的类中使用依赖注入方式使用​​AutoMapper​​功能了。上一张调试截图具体看一下吧:红色框中就是依赖注入的功能。Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_ide_04

题外话

添加上以上功能之后,如果还想引入其他类库实现依赖注入功能,只需要在此函数中添加实现依赖注入的代码即可。

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_ide_05

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能_html_06

— END —

-----------------------------------