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