在这里我创建了通用存储库类,我有“TEntity”的名称,我想用该名称访问我的模型(类)
public class GenericRepository<TEntity> : IService<T>,IDisposable where T : class
这是我的通用存储库
我有字符串“客户” 我如何转换它以访问我的模型?
string model = "Customers";
// Convert String To TEntity Type.
GenericRepository<Customers> ctx = new GenericRepository<Customers>()
我的错误是““模型”是可变的,但使用像类型”
Type repositoryType = typeof(GenericRepository<>).MakeGenericType(model);
var repository = Activator.CreateInstance(repositoryType);
Type.GetType
:
var modelType = Type.GetType("Customers");
Type repositoryType = typeof(GenericRepository<>).MakeGenericType(modelType);
虽然它可能需要程序集限定的类型名称:
如果您知道另一个程序集中的类型的程序集限定名称(可以从
获取),则可以使用GetType
方法获取另一个程序集中类型的Type
对象。AssemblyQualifiedName
导致加载GetType
中指定的程序集。typeName
备注:
我建议为此目标创建一个从字符串到类型的静态字典,即:
public static class TypeHelper
{
public static readonly IReadOnlyDictionary<string, Type> Map = new Dictionary<string, Type>
{
{ nameof(Customers), typeof(Customers) }
};
}
通用存储库/UoW over EF 可以被视为反模式(如果您使用 EF)。
我认为在通过反射使用运行时构造之前你应该三思而后行。