gpt4 book ai didi

c# - 存储库工厂类

转载 作者:可可西里 更新时间:2023-11-01 08:38:58 25 4
gpt4 key购买 nike

public enum RepositoryType
{
ClinicRepository,
MedicationRepository,
PatientRepository,
TreatmentRepository
}

public class ObjectFactory<T>
{
public static IRepository<T> GetRepositoryInstance(RepositoryType type)
{
switch (type)
{
case RepositoryType.ClinicRepository:
return new what ?;

default:
return what ?
}
}
}

public interface IRepository<T>
{
void Add(T item);
void Remove(int id);
void Update(T item);
IList<T> GetAll();
T GetItemById(int id);
}

我正在尝试创建一个 RepositoryFactory 类,并且我复制了到目前为止所做的一切。谁能帮我解决这个问题?我卡住了!提前致谢

编辑:

最后我想要这样的东西。是否可以制作 1 个 Repository 类并实现类似

的东西

dc.THATOBJECT.insertonsubmit(item) ?

public class TreatmentRepository : IRepository<Treatment>
{
public void Add(Treatment item)
{
using (PatientsDataContext dc = new PatientsDataContext())
{
dc.Treatments.InsertOnSubmit(item);
dc.SubmitChanges();
}
}

最佳答案

最简单的工厂只需要从 IRepository 派生的类型具有无参数构造函数。

public class ObjectFactory {
public static TRepository GetRepositoryInstance<T, TRepository>()
where TRepository : IRepository<T>, new() {
return new TRepository();
}
}

如果您需要针对给定存储库类型的特定构造函数,您可以将对象指定为对象数组并使用 CreateInstance 创建它们

public class ObjectFactory {
public static TRepository GetRepositoryInstance<T, TRepository>(
params object[] args)
where TRepository : IRepository<T> {
return (TRepository)Activator.CreateInstance(typeof(TRepository), args);
}
}

要使用其中任何一个,你只需要说

var treatmentRepo = 
ObjectFactory.GetRepositoryInstance<Treatment, TreatmentRepository>();

关于c# - 存储库工厂类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com