エンティティをマップしてモデルを後方にマップすることを想定した汎用インターフェースを作成しました。 autofac構成で約80の登録を行う必要があります。一括登録はできますか?これがインターフェースです:
public interface ICommonMapper<TEntity, TModel, TKey>
where TEntity : BaseEntity<TKey>
where TModel : BaseEntityViewModel<TKey>
where TKey : struct
{
TModel MapEntityToModel(TEntity entity);
TModel MapEntityToModel(TEntity entity, TModel model);
TEntity MapModelToEntity(TModel model);
TEntity MapModelToEntity(TModel model, TEntity entity);
}
ありがとう!
あなたが使うことができます:
builder.RegisterAssemblyTypes(assemblies)
.AsClosedTypesOf(typeof(ICommonMapper<,,>));
ここで、assemblies
は、タイプが属するアセンブリのコレクションです。
ICommonMapper<Person, PersonModel, Int32>
から継承するPersonMapper
がある場合、AutofacはICommonMapper<Person, PersonModel, Int32>
を解決できます
これを行う別の方法がありますが、typeFinderを使用します。
var mappers = typeFinder.FindClassesOfType(typeof(ICommonMapper<,,>)).ToList();
foreach (var mapper in mappers)
{
builder.RegisterType(mapper)
.As(mapper.FindInterfaces((type, criteria) =>
{
var isMatch = type.IsGenericType &&
((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
return isMatch;
}, typeof(ICommonMapper<,,>)))
.InstancePerLifetimeScope();
}