我有這種要求,因為大約有 100 多個型號
我為資料庫操作實作了存盤庫模式
public class interface IRepository<TEntity> : IRepository<TEntity>where TEntity : class
它有方法 Task Add(TEntity entity);
在正常情況下,如果我想將 UserClass 模型添加到 DB,我會這樣做
public class UserClass {string Name}
UserClass userClassObj = new UserClass {Name = "John"}
await Repository <UserClass>.Add(userClassObj);
但是,我的要求是根據條件動態傳遞傳遞型別別,因為我有大約 100 多個模型。
if (condition == "1")
classtype = USerClass
else if (condition == "2")
classtype = DepartmentClass
else if (condition == "3")
classtype = CategoryClass
然后將 classtype 傳遞給 Repository await Repository <classtype>.Add(object of (classtype ));
這是可行的嗎?任何作業示例都將受到高度評價。到目前為止找不到直接的實作。
uj5u.com熱心網友回復:
您可能需要像這樣擴展您的類定義,
public class interface IRepository<TEntity> : IRepository<TEntity>where TEntity : class, new()
new() 允許根據傳遞的型別創建新物件。
那么你可以這樣稱呼它,
if (condition == "1")
await Repository<USerClass>.Add(object);
else if (condition == "2")
await Repository<DepartmentClass>.Add(object);
uj5u.com熱心網友回復:
如果您不想使用 Reflection 可以添加一個額外的 add helper 方法(也許也到您的 IRepositoryType 不確定是否this<T>有效)
public static async Task Add<T>(T objectToAdd) where T : TEntity
{
await Repository<T>.Add(objectToAdd)
}
如果您有型別引數和需要該型別的引數,則不必再指定它,它通常會選擇具有給定引數型別的正確型別引數。例如
var userObject = new UserObject();
Repository.Add(userObject);
將自動檢測它是要添加的型別的用戶物件
另一種可能性是使用 Dictionary<Type,yourDBsetType>() 并通過型別鍵匹配它
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311148.html
下一篇:方法論據
