c# - 具有初始参数的类可以使用控制反转模式(IoC)吗?
问题描述
我很好奇具有初始参数的类可以使用控制反转模式(IoC)吗?
例子 :
带有搜索按钮的页面可以通过类助手实例化搜索订单详细信息。
班级 :
public class OrderDetail
{
order order ;
public OrderDetail(string orderID)
{
order = DumbOrderList().where(o=>o.orderID == OrderID);
}
public decimal GetPrice()
{
retrun order.Price;
}
public datetime GetDate()
{
retrun order.Date;
}
...
...
...
}
页:
[HttpPost]
public IActionResult Search(string orderID)
{
OrderDetail orderHelper = new OrderDetail(orderID);
return Json(orderHelper.GetPrice());
}
页面依赖于OrderDetail
类,每次搜索都会用orderID
.
如何OrderDetail
使用 IoC 模式制作类?
或者如果它不能使用 IoC 模式,那么我怎样才能使页面不依赖于这个类(解耦)?
解决方案
实际上,您设计课程的方式可以改进。不要让你的类依赖于某个参数来实例化,而是让那个类的方法依赖。
我的意思是说,重新设计 OrderDetail 类,如下所示:
1.) 创建一个界面
public interface IOrderDetail
{
GetPrice(int orderId)
}
2.) 创建一个实现接口的类
public class OrderDetail : IOrderDetail
{
public GetPrice(int orderId) {....}
}
3.) 在 IoC 容器中注册依赖
container.RegisterType<IOrderDetail, OrderDetail>();
4.) 在 API Controller 中像下面这样使用它
public class SomeController : ApiController
{
private readonly IOrderDetail _orderDetail;
public SomeController(IOrderDetail orderDetail)
{
_orderDetail = orderDetail;
}
[HttpPost]
public IActionResult Search(string orderID)
{
return Json(_orderDetail.GetPrice(orderID));
}
}
推荐阅读
- npm - 如何在 Windows 10 中升级我的 npm 版本?
- flutter - 单个可变状态而不是多个不可变状态?
- php - Laravel Eloquent 查找日期超过 27 天和 29-49 天的行
- javascript - NVDA 未正确宣布 aria-live 区域
- sql - SQL查询连续项目检查总数
- electron - 在 Mac 上删除电子应用程序时如何删除方案
- c++ - 解决循环依赖
- javascript - 多个复制文本按钮javascript
- c# - NLog 不创建日志文件,通过代码配置
- nestjs - 类型“typeof Questions”不可分配给类型“typeof Model”