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

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能相关的知识,希望对你有一定的参考价值。

前言

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

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

一、新建PRISM框架的项目

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

三、添加nuget包

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

DryIoc.Microsoft.DependencyInjection
Microsoft.Extensions.DependencyInjection
AutoMapper
AutoMapper.Extensions.Microsoft.DependencyInjection

我在项目中添加的版本如下图所示:

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

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

/// <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功能了。上一张调试截图具体看一下吧:红色框中就是依赖注入的功能。

题外话

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

— END —

「公众号推荐」

回复:「rdm」 获取Redis Desktop Manager版的安装包

回复:「redis」 获取5.0.9版的Windows安装包(exe)

回复:「ca」 获取  截图、GIF等工具三件套,便携版和安装版全部包括

「加号主回复”入群“」即可加入群聊


以上是关于Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能的主要内容,如果未能解决你的问题,请参考以下文章

Prism.Wpf 使用示例

从PRISM开始学WPFPrism?

从PRISM开始学WPFMVVMViewModel?

从PRISM开始学WPFMVVMCommand?

在 Wpf 应用程序中使用 Prism 进行导航

使用 Prism 的 Wpf 中模块之间的 ApplicationCommands 问题