Введение
Я использую ASP.Net MVC3. Мои контроллеры взаимодействуют с уровнем обслуживания, а уровень обслуживания взаимодействует с уровнем доступа к данным, который использует Entity Framework.
Я получаю конкретную сущность, используя Entity Framework. Эта сущность превращается в DTO. Затем я передаю этот DTO контроллеру MVC. Как то так:
псевдокод:
// This is inside my Service Layer
var entity = DataAccess.GetById(id);
var dto = createDtoWithValuesFrom(entity);
return dto; // Return dto to MVC controller
В этом DTO я хотел бы использовать зависимость, например, калькулятор. Допустим, мой DTO выглядит так:
public class Customer
{
private ICalculator Calculator;
public class Customer(ICalculator calculator)
{
Calculator = calculator;
}
public string Name { get; set; }
public decimal Discount
{
get
{
return Calculator.Discount();
}
}
}
Задача
Как мне создать экземпляр моего DTO и позволить Autofac ввести калькулятор?
Я могу придумать способ сделать это:
var calculator = DependencyResolver.Current.GetService<ICalculator>;
var dto = new DTO(calculator );
Но я не знаю, является ли это лучшим способом сделать это, так как он пахнет ServiceLocator, и я читал, что не рекомендуется использовать это.