use*_*364 5 c# dependency-injection code-injection
我正在尝试理解依赖注入的概念。下面是我尝试调试的示例。在这里,我创建了 Customer 类,我已将其依赖项注入到他的构造函数中。现在,当我调用this.Iorder.GetOrderDetails();该Index方法时,它给我错误NullReferenceException并要求使用new关键字创建一个对象来调用该方法。当我将此调用this.Iorder.GetOrderDetails();移至另一个方法GetCutomerDetails()并在索引方法中调用该方法时,它起作用了。
问题:我无法理解为什么this.Iorder.GetOrderDetails() 方法调用在方法中不起作用 Index以及为什么它在方法中起作用GetCutomerDetails()
public interface IorderDetails
{
void GetOrderDetails();
}
public class CustomerModel : IorderDetails
{
public void GetOrderDetails() {}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class CustomerController: Controller
{
private IorderDetails Iorder;
//DI constructor Injecting OrderDetails object
CustomerController(IorderDetails iorderObj)
{
if (iorderObj == null)
throw new ArgumentNullException("orderObj should not be null");
this.Iorder = iorderObj;
}
//Default constructor
public CustomerController() { }
public ActionResult Index()
{
CustomerController objCustomer = new CustomerController(new CustomerModel());
objCustomer.GetCutomerDetails();
//Commented GetOrderDetails() method
//this.Iorder.GetOrderDetails();
return View();
}
public ActionResult GetCutomerDetails()
{
this.Iorder.GetOrderDetails();
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
您有 的默认构造函数CustomerController。当它被调用时,您不会向 分配任何内容Iorder。在这种情况下也是如此null。之后,在方法中,Index()您尝试GetOrderDetails()使用执行方法Iorder,该方法为空。这失败了。当您创建内部方法的另一个实例时,您可以调用该实例。CustomerControllerIndex()GetOrderDetails()
一般来说,与依赖注入结合使用时,不建议使用多个构造函数。但是当有必要时,您应该将所有实例字段初始化为有效的值。这称为本地默认值。关于依赖注入模式和反模式的一本优秀书籍是.NET 中的依赖注入。另请查看其作者的博客。
| 归档时间: |
|
| 查看次数: |
5932 次 |
| 最近记录: |