我目前正在使用沒有啟動方法的 .NET 5 類別庫專案。
我試圖實作的想法是開發人員可以利用這個庫并傳入一個物件。該物件將運行該方法,AutoMapper 將獲取與 FirstDTO 中的屬性對齊的屬性,然后回傳一個可以在任何其他專案中使用的 DTO。
我對 AutoMapper 位比較陌生,在這里找到了這篇文章:如何在類別庫專案中配置自動映射器?
我喜歡這種方法并利用它將動態物件映射到 DTO:
組態檔
public static class Configuration
{
private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
cfg.AddProfile<MappingProfile>();
});
IMapper mapper = config.CreateMapper();
return mapper;
});
public static IMapper Mapper => Lazy.Value;
}
幾乎逐字逐句的方法。
我有我的MappingProfile.cs類:
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<dynamic, FirstDTO>();
CreateMap<dynamic, SecondDTO>();
}
}
當我呼叫我的基類時,我有以下方法:
public class BaseLibraryClass : IBaseLibraryClass
{
public FirstDTO GetFirstObject(dynamic objectSentIn)
{
return Configuration.Mapper.Map<FirstDTO>(objectSentIn);
}
}
哪個,在我看來,應該作業。
現在,當我撰寫 xUnit 單元測驗時,在將 FirstDTO 與構建的 DTO 進行比較時,我遇到了失敗的 Assert.Equal:
private readonly IBaseLibraryClass baseLibraryClass = new BaseLibraryClass();
private readonly FirstDTOBuilder firstDTOBuilder = new FirstDTOBuilder();
[Fact]
public void TestSeparateObject()
{
// Arrange
FirstDTO firstDTO = firstDTOBuilder.DefaultDTO().Build();
// Act
FirstDTO result = baseLibraryClass.GetFirstObject(firstDTO);
// Assert
Assert.Equal(firstDTO, result);
}
當我除錯這個單元測驗時,最終會發生什么,DTO 是通過 Builder 用分配的屬性構建的。它使用填充的屬性成功地將 DTO 傳遞到 GetFirstObject,但是當它回傳時,它回傳一個 FirstDTO 物件型別,其屬性全部歸零,最終未能通過我的單元測驗。
我覺得這是顯而易見的事情,但我一生都無法弄清楚是什么導致屬性無法正確映射。
任何幫助將不勝感激!
uj5u.com熱心網友回復:
Automapper 支持開箱即用的動態映射,無需配置任何內容,因此在您的情況下,從配置中洗掉組態檔(或CreateMap從組態檔中洗掉's )應該可以正常作業:
public static class Configuration
{
private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
});
IMapper mapper = config.CreateMapper();
return mapper;
});
public static IMapper Mapper => Lazy.Value;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/371010.html
上一篇:c#沒有多載匹配委托'RoutedEventHandler'
下一篇:C#if陳述句中的不同概率
