Я пытаюсь понять концепцию впрыскивания зависимостей. Ниже приведен пример, который я пытаюсь отлаживать. Здесь я создал класс Customer, зависимости которого у меня есть Injected в его конструкторе Теперь, когда я вызвал 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() {}
}
Контроллер:
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();
}
}
Вы имеете в виду dependEncy injection? –
Что вы используете для ввода IOrderDetails в класс CustomerController? – stuartmclark
Удалить конструктор по умолчанию, и вы увидите, почему ваш код не работает в методе индекса. –