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/