解決策はAutoMapper自体にあると思います。
AutoMapperプロファイルを使用して、起動時に登録します。
あなたのプロファイルに依存性が必要ない場合は、IOCコンテナは必要ありません。
/// <summary>
/// Helper class for scanning assemblies and automatically adding AutoMapper.Profile
/// implementations to the AutoMapper Configuration.
/// </summary>
public static class AutoProfiler
{
public static void RegisterReferencedProfiles()
{
AppDomain.CurrentDomain
.GetReferencedTypes()
.Where(type => type != typeof(Profile)
&& typeof(Profile).IsAssignableFrom(type)
&& !type.IsAbstract)
.ForEach(type => Mapper.Configuration.AddProfile(
(Profile)Activator.CreateInstance(type)));
}
}
そして、彼らだけでちょうどこの例のようにプロファイルを実装:
public class ContactMappingProfile : Profile
{
protected override void Configure()
{
this.CreateMap<Contact, ContactDTO>();
this.CreateMap<ContactDTO, Contact>();
}
}
しかし、あなたのプロファイルを解決する必要がある依存関係を持っている場合は、AutoMapperのための抽象化を作成し、ちょうど登録する前に、すべてのプロファイルを登録することができ抽象化 - IObjectMapper - このようなシングルトンのように:
public class AutoMapperModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
// register all profiles in container
AppDomain.CurrentDomain
.GetReferencedTypes()
.Where(type => type != typeof(Profile)
&& typeof(Profile).IsAssignableFrom(type)
&& !type.IsAbstract)
.ForEach(type => builder
.RegisterType(type)
.As<Profile>()
.PropertiesAutowired());
// register mapper
builder
.Register(
context =>
{
// register all profiles in AutoMapper
context
.Resolve<IEnumerable<Profile>>()
.ForEach(Mapper.Configuration.AddProfile);
// register object mapper implementation
return new AutoMapperObjectMapper();
})
.As<IObjectMapper>()
.SingleInstance()
.AutoActivate();
}
}
、ドメイン内のI抽象すべての私の技術は、これが最良のapproacに見えたので、私のためにh。
ここでコードを作成してみましょう。
PS-コードはいくつかのヘルパーと拡張機能を使用している可能性がありますが、そこにはコアのものがあります。
'Mapper'も静的であるため、GACファイルで' Initialize'メソッドを使って静的クラスを使用してみませんか?アプリの起動時に一度呼び出すだけです。 –
問題は、多くの異なるプロジェクトで使用されているデータアクセスDLLでこれを使用しているため、マッパー初期化の実際のエントリポイントがないことです。 – stvn
C++とは異なり、静的コンストラクタは、アセンブリがロードされていないときにオンデマンドで実行されます。ライブラリへのエントリポイントがある場合は、初期化するためにその型の静的コンストラクタを作成します。それ以外の場合は、[このようなハック](http://einaregilsson.com/module-initializers-in-csharp/) –