Prism+WPF使用DependencyInjection實現AutoMapper的依賴注入功能
前言
在使用PRISM+WPF開發項目的過程中,需要使用AutoMapper
實現對象-對象的映射功能。無奈PRISM沒有相關對AutoMapper
相關的類庫,於是轉換一下思想,在nuget 中存在有關使用Microsoft.Extensions.DependencyInjection
來實現AutoMapper
的依賴注入方法,那能不能將DryIoc
和Microsoft.Extensions.DependencyInjection
一起使用來實現依賴注入的功能呢?通過在網上搜索,發現
痕迹大佬實現了【WPF Prism8.0中註冊Nlog日誌服務】。文章地址://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
具體實現如下: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
功能了。
上一張調試截圖具體看一下吧:紅色框中就是依賴注入的功能。
源碼資源下載//download.csdn.net/download/weixin_42930928/22913396
題外話
添加上以上功能之後,如果還想引入其他類庫實現依賴注入功能,只需要在此函數中添加實現依賴注入的代碼即可。