2016-10-18 51 views
4

https://lostechies.com/jimmybogard/2016/07/20/integrating-automapper-with-asp-net-core-diで説明されている手法を使用して、ASP.NET Core MVCアプリケーションでAutoMapperを実装しようとしています。ここでASP.NETコアMVCでのAutoMapperの実装

はここmy startup.cs

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
… 
    services.AddMvc(); 

    services.AddAutoMapper(); 

… 

    // Autofac configuration 
    return ConfigureAutofacContainer(services); 
} 

あるmy AutoMapper.Profile implementation

public class AutoMapperProfile_NetCore_DtoFromDao : Profile 
{ 
    #region ctor 

    public AutoMapperProfile_NetCore_DtoFromDao() 
    { 
     CreateMaps(); 
    } 

    #endregion 

    #region Methods 

    protected void CreateMaps() 
    { 
     if (Mapper.Configuration.FindTypeMapFor(typeof(AddressType), 
               typeof(AddressTypeDto)) == null) 
      CreateMap<AddressType, AddressTypeDto>(); 

     Mapper.Configuration.AssertConfigurationIsValid(); 
    } 
} 

AutoMapperProfile_NetCore_DtoFromDao.CreateMaps(ある))(ServiceCollectionExtensions.AddAutoMapperClassesによって呼び出されている:

public static class ServiceCollectionExtensions 
{ 
    … 
    private static void AddAutoMapperClasses(IServiceCollection services, 
       Action<IMapperConfigurationExpression> additionalInitAction, 
       IEnumerable<Assembly> assembliesToScan) 
    { 
     … 
     Mapper.Initialize(cfg => 
     { 
      additionalInitAction(cfg); 

      foreach (var profile in profiles) 
      { 
       cfg.AddProfile(profile); 
      } 
     }); 
     … 
    } 
} 

私は取得しています以下を除くイオン:

タイプの例外「System.InvalidOperationExceptionが」を AutoMapper.dllで発生したが、ユーザーコードで

Qを扱っていなかった - これはMapper.Configuration.FindTypeMapForを呼び出すプロファイルによるものですMapper.Initialization()中に()?

Q - 初期化中に追加する前に既存のマッピング設定をテストすることはできますか?

のSystem.InvalidOperationExceptionは
HRESULT = -2146233079メッセージ=マッパーが初期化されていないユーザコードによって未処理でした。適切な設定で を初期化してください。マッパー のインスタンスをコンテナなどを使用して使用する場合は、静的なMapper.Mapメソッドへの呼び出しがないことを確認してください。 ProjectToメソッドまたはUseAsDataSource拡張メソッドを使用している場合は、渡すことを確認してください 適切なIConfigurationProviderインスタンス。ソース= AutoMapper
のStackTrace: CでDna.NetCore.Core.BLL.Mappers.AutoMapperProfile_NetCore_DtoFromDao.CreateMaps() でAutoMapper.Mapper.get_Configuration() で :\ SRC \ AutoMapper.Extensions.Microsoft.DependencyInjection \ SRC \ Dna.NetCore.Core.BLL \マッパー\ AutoMapperProfile_NetCore_DtoFromDao.cs:\ SRC \ AutoMapper.Extensions.Microsoft:ライン 22 Dna.NetCore.Core.BLL.Mappers.AutoMapperProfile_NetCore_DtoFromDao..ctorで() Cです。 DependencyInjection \ src \ Dna.NetCore.Core.BLL \ Mappers \ AutoMapperProfile_NetCore_DtoFromDao.cs:line 13内部エラー:

答えて

7

OK。ここにはいくつかのものがあります。あなたのAutoMapperの設定は、これを構築するための最も簡単な方法は、単に次のとおりです。

プロファイルのスタートアップクラスからアセンブリをスキャンし、自動的にMapper.Initializeを使用してそれらを追加し
services.AddAutoMapper(typeof(Startup)); 

。その後Mapper.Initializeを呼び出さないでください。

あなたのプロフィール。あなたはしてはならないことをたくさんしています。まず、あなたのプロファイルがAssertConfigurationIsValidを呼び出しています - しないでください。次に、既存のTypeMapsをチェックします。基本CreateMapメソッドを呼び出すだけです。

最後に、追加のAddAutoMapperClasses呼び出しがあります。それを使わないでください。それを取り除く。 「services.AddAutoMapper」が必要です。 AddAutoMapperメソッドは、渡されたアセンブリで見つかったProfileクラスを持つMapper.Initializeを呼び出します。

+0

クラスライブラリベースのサービスでAutoMapperを使用していてxUnitテストでテストしている場合は、サービス.AddAutoMapper "注射? xUnitテストフィクスチャの開始時に?これは、.NET CoreクラスライブラリxUnitプロジェクトであり、.NET Frameworkの使用方法の多くの例があります。ありがとう。 – dodegaard

+0

ここに私がしたことがあります:https://lostechies.com/jimmybogard/2016/10/24/vertical-slice-test-fixtures-for-mediatr-and-asp-net-core/基本的には固定器具の一部になりました。 「スタートアップ」構成を呼び出すためのセットアップ。 –

関連する問題