2011-05-09 8 views
7

AutoMapperを使用してマッピングされるソースクラスと宛先クラスがあります。 宛先には、コンストラクタに注入されたロガーサービスがあります。AutoMapperの宛先クラスにサービスを注入する

しかし、StructureMapを通じてコン​​ストラクタにサービスを注入する方法を知りませんか?私は次のことを試してみた

私はマッピングコールで例外を持っ防ぐことはできませんでした
Mapper.Initialize(m => 
{     
    m.ConstructServicesUsing(ObjectFactory.GetInstance); 
}); 

サービスが適切で注入されていないので、私は推測します。

私はまた、次のことを試してみました:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>()); 

しかし、私はエラーを取得する:はタイプを委任するラムダ式を変換することはできません、まだ私が見てきたすべての例では、この方法を使うのか?

答えて

5

ConstructUsingに渡すラムダは、宛先タイプのインスタンスを返す必要があります。だからあなたの場合には、これをしたいと思う:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<Dest>()); 

を正しくのStructureMapのセットアップを持っていると仮定すると、それは取引先オブジェクトを作成し、あなたのためのILoggerServiceを注入する必要があります。

+0

を!ありがとう。 – jaffa

4

また、これを行うことができます:エクセレント

 Mapper.Configuration.ConstructServicesUsing(container.Resolve); 

     Mapper.CreateMap<Source, Dest>().ConstructUsingServiceLocator(); 
+0

興味のある方は、工場を通過するのではなく、オブジェクトが解決されているので、これは選択した答えよりも速いでしょうか? – Worthy7

関連する問題