gpt4 book ai didi

c# - 具有类型 T 的通用构造函数的通用存储库

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:51 24 4
gpt4 key购买 nike

我在 C# 中有以下类:

public class Customer{
public long Id { get; set;}
public String Firstname { get; set;}
public String Lastname { get; set;}

public Customer(long id, String firstname, String lastname){...}
}

public class Book{
public long Id { get; set;}
public String Title { get; set;}
public String Author{ get; set;}
public int NumberOfCopies{ get; set;}

public Book(long id, String title, String author, int numberofcopies){...}
}

我的仓库是通用的,界面如下:

public interface IGenericRepository<T> where T : class, new(){

Add(T entity);
Update(T entity);
Delete(T entity);
GetAll();

}

因此,要为客户创建存储库,我会创建一个 IGenericRepository 并为一本书创建 IGenericRepository 。要从 GUI 访问这些方法,我需要这样的方法:AddCustomer(long id, String firstname, String lastname) 和一本书一样,因为 GUI 不知道实体本身。我正在考虑创建一个包含这些方法的 CustomerService 和 BookService。但是我必须为我添加的每个实体创建一个新服务。

我的问题是,我怎样才能使这个服务通用并且仍然保留来自实体构造函数的参数?

明确地说,我想要一个通用的服务类,它可以添加书籍和客户,但使用相同的方法。例如:

Add(<constructor parameters of T>)

这个方法将从一个 Controller 类调用,该类将拥有所有的服务。然后,GUI 可以通过 Controller 访问这些服务方法。

这可能吗?如果是,如何?如果不是,是否有更好的解决方案来实现这一目标?

提前致谢!

最佳答案

一种选择是根据需要接受参数,例如。例如:

public void Add<T>(params object param) { ... }

T 是您要创建的类型。通过反射检查哪些构造函数可用,选择适合参数列表的构造函数。然后实例化对象。瞧。

关于c# - 具有类型 T 的通用构造函数的通用存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28228033/

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