<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 .NET Core 中使用 AutoMapper 編寫自定義解析器

          共 1606字,需瀏覽 4分鐘

           ·

          2022-04-19 12:26

          本文將介紹如果利用.NET Core的依賴注入技術(shù)使用AutoMapper的自動逸解析器。

          AutoMapper 是 .NET 生態(tài)系統(tǒng)中的一個出色工具,它簡化了將屬性值從一個對象“ClassOne”“映射”到另一個對象(可能是“ClassTwo”)的屬性的過程。對于大多數(shù)用例,映射值可以很容易地從源對象確定,并且通常映射到目標對象上的一個字段,即使與該字段的名稱不同,或者需要忽略的屬性值。


          前幾天,我遇到了一個edge案例,需要在特定映射中使用應(yīng)用程序配置中的URL值。如何訪問我在應(yīng)用程序啟動時注冊為依賴項的配置并不明顯。幸運的是,我在AutoMapper偶然發(fā)現(xiàn)了IValueResolver,我想和大家分享以下我是怎么處理的,這樣,如果你遇到這種情況,就可以節(jié)約你的時間了。

          自定義解析器

          如上所述,我需要在程序啟動期間注冊為可注入依賴項的配置中的一個值。我需要創(chuàng)建一個自定義解析器來解決這個問題,它實現(xiàn)了一個名為 `IValueResolver` 的 AutoMapper的 接口。此接口要求您實現(xiàn)一個名為 Resolve的方法,該方法提供對源對象和目標對象的訪問,并將目標值設(shè)置為函數(shù)的輸出。


          在這個解析器中,我們可以聲明一個構(gòu)造函數(shù),它允許我們注入我們在啟動時注冊的配置對象。如果沒有這個解析器,我們就無法在常規(guī)的 MappingProfile 中注入該配置,也不會給我們的頂級映射類引入一些非常緊密的耦合。使用這種方法,我們只在特定映射中需要它們時才注入依賴項。

          using AutoMapper;
          using Microsoft.Extensions.Configuration

          public class MyResolver : IValueResolver
          {
          private readonly string _myAppUrl

          public MyResolver(IConfiguration configuration)
          {
          _myAppUrl = configuration["MyAppUrl"];
          }

          public string Resolve(SourceType source, TargetType target, string destMember, ResolutionContext context)
          {
          return $"{_myAppUrl}/api/Orders/{source.OrderId}";
          }
          }

          使用自定義解析器

          我們在下面的代碼中添加屬性映射,并告訴 AutoMapper 在映射值時使用自定義解析器。

          using AutoMapper;

          public class MappingProfile : Profile
          {
          public MappingProfile()
          {
          CreateMap()
          .ForMember(x => x.Url, opt => opt.MapFrom());
          }
          }
          // In Startup.cs
          public void ConfigureServices(IServiceCollection services)
          {
          // May not need this if mappings are in same project
          services.AddTransient();
          }

          總結(jié)

          我希望你喜歡這篇文章。AutoMapper 和 .NET Core 的 DI 都是很棒的工具,而自定義解析器使我們能夠利用兩者的強大功能。快樂學(xué)習(xí),開心工作!


          文章翻譯自:https://enlear.academy/how-to-write-a-custom-resolver-using-automapper-in-net-core-52d90f0a5ba5


          瀏覽 105
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩午夜精品一区二区三区 | aⅴ免费观看 | 国产18禁黄网站禁片免费视频 | 久久99蜜桃精品 | 91福利在线视频 |