c# - 存储库工厂类

标签 c# repository

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/

相关文章:

c# - WCF 地址访问拒绝异常

c# - 使用 Rx 下载文件(响应式编程)

c# - 如何使用 Entity Framework 为我的存储库实现事务?

eclipse - 合并/聚合 eclipse p2 存储库/可扩展的 p2 存储库

mercurial - 如何干净地处理存储库中的源代码和数据

c# - 这个 ToArray() 实现如何更优化?

c# - 使用 Dynamic Linq 和 EPPlus 导出到 Excel?

svn - 我可以使用精确的文件副本在机器之间复制 SVN 存储库吗?

c# - 如何在 C++/CLI 中将属性添加到返回值?

repository - Bzr : Create a shared repository from an existing stand-alone repository