同僚に継承されているビジネス ロジック操作の基本クラスがあります。objectContext
このクラスは、 as パラメータを必要とするコンストラクタを公開します。この基本クラスは、アトミック CRUD 操作のコンポーネントと考えることができます (すべての選択、挿入、編集、および削除メソッドは、常に 1 つのエンティティに対してのみ機能します)。
objectContext
次に、ビジネストランザクションを実行するために上記のすべての基本クラス間で主な目的が共有される「スーパークラス」があり、必要に応じてbaseClass
インスタンスを提供する必要があります。
だから、私はスーパークラスをに「注入」するエレガントな方法を探していobjectContext
ますbaseclass
:
public BaseClass<T> where T : entity
{
private ObjectContext _ctx;
public BaseClass(ObjectContext ctx){ _ctx = ctx;}
public virtual IList<T> Select(){..}
public cirtual voind Insert(T entity){..}
// other stuff
}
public class SuperClass
{
private ObjectContext _ctx = new...
public BaseClass<TEntity> LoadBaseClass(TBase, TEntity) where TBase : BaseClass<TEntity>, where TEntity : class
{
BaseClass<TEntity> obj = Activator.CreateInstance(typeof(TBase), _ctx); // share objectContext
}
public int SaveAll(){return _ctx.SaveChanges();}
}
ご覧のとおり、私のスーパー クラスはbaseClass
その型を介して何らかのインスタンスを返すことができます。ただし、一部の継承されたクラスが他のパラメーターを使用して独自のコンストラクターを定義している場合、私のLoadBaseClass
メソッドは失敗します。
LoadBaseClass
メソッドからのインスタンス作成中にエラーが発生する可能性を回避するために、クリーンな解決策を見つけます。私が知っている唯一の方法は、プライベートコンストラクターを定義することですが、この方法では誰も継承できbaseclass
なくなります..