私のプロジェクト クラス ライブラリ (dll) で automapper を使用する方法について少し苦労しています。以下の全体的なソリューションの構造を参照してください。
WebApp が起動し、Global.asax App Start で、マッピング プロファイルを追加するために AutoMapper.Configure() メソッドが呼び出されます。今のところ、Services.AutoMapperViewModelProfile を追加しているだけです。ただし、各 WebStoreAdapter (以下の例では BigCommerce と Shopify) のプロファイルをどうにかして説明する必要があります。AutoMapperConfig 中にプロファイルを追加できるようにするためだけに、WebApp の各 WebStoreAdapter への参照を追加しないことを望んでいました。WebStoreFactory の AutoMapper.Initialize に別の呼び出しを追加すると、WebApp の呼び出しがオーバーライドされます。
他の方法で、ここで欠落している、または完全にずれている別の方法はありますか?
WebApp
- AutoMapperConfig
- AddProfile Services.AutoMapperViewModelProfile
Services.dll
- AutoMapperViewModelProfile
Scheduler.dll (uses HangFire to execute cron jobs to get data from shop carts. Its UI is accessed via the WebApp)
WebStoreAdapter.dll
-WebStoreFactory
BigCommerceAdapter.dll
- AutoMapperBigCommerceDTOProfile
ShopifyAdapter.dll
- AutoMapperShopifyDTOProfile
Global.asax から呼び出される初期化:
public static class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(am =>
{
am.AddProfile<AutoMapperViewModelProfile>();
});
}
}
プロフィール:
public class AutoMapperViewModelProfile : Profile
{
public override string ProfileName
{
get { return this.GetType().ToString(); }
}
protected override void Configure()
{
CreateMap<InventoryContainerHeader, InventoryContainerLabelPrintZPLViewModel>()
.ForMember(vm => vm.StatusDescription, opt => opt.MapFrom(entity => entity.InventoryContainerStatus.DisplayText))
.ForMember(dest => dest.ContainerDetails, option => option.Ignore())
;
...
}
}