1

次のようなマッピングインターフェイスがあります。

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()});
4

0 に答える 0