我有一个由我的同事继承的业务逻辑操作的基类。此类公开一个需要objectContext
as 参数的构造函数。您可以将此基类视为原子 CRUD 操作的组件(其所有选择、插入、编辑和删除方法将始终只作用于一个实体)。
然后,我有一个“超类”,其主要目的是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
了..