gpt4 book ai didi

c# - 如何使用 ASP.NET MVC 通用 Controller 来填充正确的模型

转载 作者:太空狗 更新时间:2023-10-29 20:47:30 24 4
gpt4 key购买 nike

我问了一个关于 ASP.NET MVC 通用 Controller 和 this answer 的问题显示这样的 Controller :

public abstract class GenericController<T> 
where T : class
{
public virtual ActionResult Details(int id)
{
var model = _repository.Set<T>().Find(id);
return View(model);
}
}

Which can be implemented like this.

public class FooController : GenericController<Foo>
{

}

Now when someone requests /Foo/Details/42, the entitiy is pulled from the _repository's Set<Foo>(), without having to write anything for that in the FooController.

他解释的方式很好,但我想为产品和客户开发一个通用 Controller ,我不会使用 EF 加载产品和客户模型,而是使用 MS 数据访问应用程序 block 。

public abstract class GenericController<T> 
where T : class
{
public virtual ActionResult Details(int id)
{
//var model = _repository.Set<T>().Find(id);
var model =customer.load(id);
or
var model =product.load(id);
return View(model);
}
}

所以当请求像/Customer/Details/42 or /product/Details/11然后将调用通用 Controller 的详细信息方法,但我们如何检测该请求来自哪个 Controller 并相应地实例化正确的类以加载正确的模型。

如果请求来自客户,那么我需要从详细操作方法加载客户详细信息,或者如果请求来自产品,那么我需要从通用 Controller 的详细操作方法加载产品详细信息。

如何使用泛型获取类型为 T 的数据集使用 Entity Framework 数据 block ?

最佳答案

您可以创建一组存储库来处理您的实体,例如 CustomerRepositoryProductRepository 来自基本接口(interface),例如

public interface IBaseRepository
{
T Get<T>(int id);
void Save<T>(T entity);
}

然后使用任何 DI 框架使用存储库类型及其实例扩展您的基 Controller 类

public abstract class GenericController<T, TRepo> 
where T : class
where TRepo : IBaseRepository, new()
{
private IBaseRepository repository;

public GenericController()
{
repository = new TRepo();
}

public virtual ActionResult Details(int id)
{
var model =repository.Get<T>(id);
return View(model);
}
}

CustomerController 示例

public class CustomerController : GenericController<Customer, CustomerRepository>
{

}

客户资料库:

public class CustomerRepository : IBaseRepository
{
public T Get <T>(int id)
{
// load data from DB
return new Customer();
}
}

关于c# - 如何使用 ASP.NET MVC 通用 Controller 来填充正确的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009031/

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