如何为自定义对象创建存储库对象?当我创建repo对象时,我不知道CustomEntity类型。
我正在尝试下面的事情。
var _unitofWork = new UnitOfWork();
var objRepository = new Repository<Type.GetType("EntityName")>(_unitofWork);
有人能帮忙吗?
您不能合理地为任意类型创建存储库。
如果对象没有任何共同之处,存储库代码将不知道如何处理它们。如何编写代码来处理Customer、ComplexNumber和System.Object?
如果你所关心的对象确实有足够的共同点,能够以一种共同的方式对待它们,那么用一个共同的基类或它们都实现的接口来表达这种共性。然后你可以输入
var rep = new Repository<IMyCommonalities>(_unitOfWork);
你可以使用MakeGenericType和Activator在运行时创建一个泛型对象
var _unitofWork = new UnitOfWork();
var objRepository = Activator.CreateInstance(typeof(Repository<>).MakeGenericObject(Type.GetType("EntityName")), _unitofWork);
唯一的问题是Activator.CreateInstance
返回一个对象。如果没有所有泛型类型的公共接口,就不可能轻松地访问任何成员。也许你有一个像IRepository
这样的接口,它不需要你可以使用的泛型。在这种情况下,将CreateInstance
的返回值转换为它。如果您没有这样的接口,则必须使用反射或动态,如果调用无效成员,则会导致运行时错误。