次のようなマッピングインターフェイスがあります。
public interface IMapping<T> where T: class, IEntityModel
{
IQueryable<U> Project<U>(IQueryable<T> set) where U : class, IModel;
}
特定のマッピングをインスタンス化する場合は、次のようにします。
public class UserMapping : IMapping<User>
{
.... code that contains mapping between IEntityModel and IModel
}
ここで、すべてのマッピングを global.asax application_start に登録し、ベース リポジトリでそれらを使用して、汎用メソッドでモデルを表示するようにします。これは、私のマッピングリゾルバーが現在どのように機能するかです:
public static class MappingResolver
{
private static Dictionary<Type, object> Mappings = new Dictionary<Type, object>();
public static void RegisterMapping<T, U>(U UMapping) where T: class, IEntityModel where U : IMapping<T>
{
Mappings.Add(typeof(T), UMapping);
}
public static IMapping<T> GetMapping<T>() where T : class, IEntityModel
{
return Mappings[typeof(T)] as IMapping<T>;
}
}
そして、リゾルバーに1つのマッピングを追加する方法が好きではないことを除いて、それはうまく機能します:
MappingResolver.RegisterMapping<User, UserMapping>(new UserMapping());
私が達成しようとしているのは、次のような構文です(構文はまったく正しくない可能性があります。アイデアを説明するためだけです):
MappingResolver.RegisterMapping((x,y) => {User, new UserMapping()});