Лук Architeture - Потребность ASP.NET MVC сослаться на Infrstructure?

Я не уверен, сделал ли я хорошую работу по поиску тем, но я, может казаться, не нахожу ответы на свои вопросы. Базирующийся от моего понимания, у Луковой Архитектуры есть UI и Инфраструктура на том же самом слое. Позвольте говорят, что у меня есть свой UI в проекте ASP.NET MVC, и у меня есть проект DAL, который является моей Инфраструктурой. Позволяет предполагают, что мой код похож на тот ниже:

 **Ядро:** 

**//интерфейс IOrderSaver был также определен на ядре** 

```
public class OrderService
{
    private IOrderSaver orderSaver;

    public OrderService(IOrderSaver orderSaver)
    {
        this.orderSaver = orderSaver;
    }

    public void AcceptOrder(Order order)
    {
        orderSaver.SaveOrder(order);
    }
}

```

 **Инфраструктура (DAL):** 

```
public class OrderSaverDAL : IOrderSaver
{
    //implementation goes here
}

```

Теперь, в моем UI (ASP.NET MVC) я хотел бы иллюстрировать примерами класс OrderService так, чтобы это могло принять заказы. Для UI, чтобы сделать это, это должно передать IOrderSaver конструктору. Это должно передать OrderSaverDAL.

**Questions**:

1. Делает UI (ASP.NET MVC), должен сослаться на OrderSaverDAL? От моего понимания Луковой Архитектуры (если я понимаю его правильно), у UI не должно быть ссылки на DAL. Кто-то может, пожалуйста, объяснить?
2. , Если я не должен ссылаться на OrderSaverDAL из своего проекта ASP.NET MVC, как я построю OrderService в ASP.NET MVC? Можно ли, пожалуйста, вести меня, давая пример кода о том, как достигнуть этого?

Большое спасибо заранее за помощь!

Вам нужен дополнительный  **модуль/слой конфигурации** , который обеспечит электричеством ui и dal. Если вы осуществляете это сами без отражения тогда, этой конфигурации moudul нужна вся ссылка.

Обычно [луковая архитектура](http://jeffreypalermo.com/blog/the-луковая архитектура-part-1/) сотрудничает с [контейнер внедрения зависимости](https://en.wikipedia.org/wiki/Dependency_injection#Automatically_injected_dependency) это может решить ссылки во времени выполнения через конфигурационные файлы или контроль местных собраний.



>  1. Делает UI (ASP.NET MVC), должен сослаться на OrderSaverDAL? От моего понимания Луковой Архитектуры (если я понимаю его правильно),
> у UI не должно быть ссылки на DAL. Может кто-то, пожалуйста,
> объяснить?
> 
> 
> 

Вы правы сказать, что у UI не должно логически быть зависимости к DAL. 

Однако как k3b указывает, распространенный способ сделать инверсию зависимости (на который Луковая Архитектура полагается в большой степени), через контейнер DI. Вам тогда нужен некоторый [Корень состава](http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx), место, где графы объектов вашего заявления составлены, используя контейнер. Корень Состава должен быть "всезнающим" и нуждается в ссылке на каждый проект, чтобы обеспечить электричеством вещи. 

Оказывается, что UI часто, где Корень Состава принят, поскольку UI - естественная отправная точка в вашем заявлении и прекрасной подгонке, чтобы сделать состав в нужное время. У вас мог быть отдельный проект для вашего Корня Состава, но это будет менее удобно.