0

私はとを使用ADO.NET EFしてRepository patternいます。一部のエンティティに共通するロジックを分離したいので、ジェネリックメソッドを使用するのが最善の方法であると判断しました。これは私のメソッドの宣言です:

internal static void ChangeCode<T>(IService<T> service, Entity entity, MaskedTextBox txtBox, string newCode, long? entityId)
            where T : Common.DbContextEntities.Entity

IService<T>はすべてのサービスが派生するEntity基本クラスであり、はすべてのエンティティが派生する基本クラス形式です。ただし、実行時に、andなどのより具体的なサービスとエンティティを渡しSoleServiceますSole。私が達成したいのは、どういうわけか、実行時型とそれらのプロパティをメソッド全体から表示できるように宣言することserviceですentity。ここで明確にするために、私が今していることは次のとおりです。

if (entity.GetType() == typeof(Sole))
            {
                Sole tempEntity = new Sole();
                ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();

問題は、使用できるtempEntityのはtempServiceその範囲内でif (entity.GetType() == typeof(Sole))あり、複数のタイプをチェックする必要がある場合(実際にはそうです)、異なるタイプごとにすべてのビジネスロジックを繰り返す必要があることです。メソッド内のどこでも使用できるように、特定の方法で実行時tempEntityに設定する方法を探しています。tempService

4

1 に答える 1

1
Sole tempEntity = new Sole();
ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();

で書き換えることができます

BaseService tempEnitity = (BaseService)Activator.CreateInstance(entity.GetType());
IBaseService tempService = tempEnitity.GetServiceInterface();

ここで、BaseServiceはすべてのサービス(SoleServiceなど)の親であり、すべてのサービスインターフェイス(ISoleServiceなど)の親であるIBaseServiceを返す仮想メソッドを含みます。

したがって、すべてのロジックはBaseServiceおよびIBaseServiceのメソッドで機能します。

于 2013-03-26T09:41:48.937 に答える