Prism+WPF使用DependencyInjection實現AutoMapper的依賴注入功能

芝麻麻雀發表於2021-09-15

前言

在使用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功能了。
上一張除錯截圖具體看一下吧:紅色框中就是依賴注入的功能。

原始碼資源下載https://download.csdn.net/download/weixin_42930928/22913396

題外話

新增上以上功能之後,如果還想引入其他類庫實現依賴注入功能,只需要在此函式中新增實現依賴注入的程式碼即可。

相關文章