Я изучаю инъекцию зависимостей с небольшим примером. Я получаю сообщение об ошибке «ссылка на объект не указывает на экземпляр объекта» из метода ProcessOrder() ниже на этой линии:Сообщение об ошибке впрыска
_iordProc.ProcessOrder(popOrder);
Что я делаю неправильно? Мне нужно предоставить конструктор без параметров?
Вот мой код ...
public interface IOrderProcessingEngine
{
void ProcessOrder(Order objOrder);
void EmailOrder(Order objEmailOrd);
}
public class Order
{
public String OrderId { get; set; }
public decimal Amount { get; set; }
public String OrderDate { get; set; }
public String DeliveryDate { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
}
public class OrderProcessingEngine : IOrderProcessingEngine
{
public void ProcessOrder(Order objOrder)
{
Console.WriteLine("This method will process my order which is very cool");
}
public void EmailOrder(Order objEmailOrd)
{
Console.WriteLine("This method will send email to the customers");
}
}
public class OrderService
{
//Dependency Injection
private readonly IOrderProcessingEngine _iordProc;
public OrderService(IOrderProcessingEngine objOrdproc)
{
_iordProc = objOrdproc;
}
public OrderService()
{
}
public void ProcessOrder(Order popOrder)
{
//Getting an error here on next line -- object reference not set to an instance of an object
_iordProc.ProcessOrder(popOrder);
_iordProc.EmailOrder(popOrder);
}
}
class Program
{
static void Main(string[] args)
{
Order myOrder = new Order();
myOrder.OrderId = "1001";
myOrder.Amount = 2000;
myOrder.OrderDate = "05/22/2015";
myOrder.DeliveryDate = "05/30/2015";
myOrder.FirstName = "Johnson";
myOrder.LastName = "Adoga";
OrderService objOrdServ = new OrderService();
objOrdServ.ProcessOrder(myOrder);
Console.ReadLine();
}
}
Если вы планируете делать это на производстве, вы можете рассмотреть возможность использования инфраструктуры DI, например [Autofac] (http://autofac.org) или [Ninject] (http://www.ninject.org). – neontapir