StructureMap в многоуровневом приложении - PullRequest
1 голос
/ 23 января 2011

У меня есть приложение asp.net mvc, имеющее три уровня 1. Уровень dataAccess (библиотека классов) 2. Бизнес-уровень (библиотека классов) 3. Веб-уровень (проект asp.net mvc)

, а такжепроект домена (библиотека классов для poco)

Я делаю сопоставления StructureMap в моем Application_start проекта MVC, но для сопоставления типов в dataAccesslayer (например, для personRepository с IPersonReository) мне нужна ссылкаDAL в моем веб-слое, который я не считаю правильным.

Каковы ваши предложения Спасибо

Ответы [ 3 ]

2 голосов
/ 23 января 2011

В качестве прагматического подхода все, что вы делаете, может быть в порядке , если вы можете соблюдать дисциплину и никогда не использовать DAL с веб-уровня. Тем не менее, если ссылка есть, это может быть на удивление трудно сделать, а как насчет других разработчиков проекта?

Лучшим вариантом будет разделить веб-слой на два слоя :

  1. Слой начальной загрузки приложения . Это настоящий веб-проект, но кроме начальной загрузки контейнера и реализации Views (страниц ASPX) больше ничего не должно быть. Это то, что мы называем Humble Executable . Он будет содержать ссылки на все другие проекты для их составления (через контейнер DI), но в противном случае он ничего не сделает. Мы называем это паттерном разрешения разрешения регистра .

  2. An Уровень прикладной модели . Этот проект будет содержать всю логику вашего приложения (в отличие от логики домена): Просмотр моделей и контроллеров. Ему не нужно ссылаться на DAL, но в него будут внедрены реализации контейнера DI.

0 голосов
/ 23 января 2011

Как уже говорили другие, ссылка на ваш проект DAL не является концом света, если вы не используете его неправильно (или, возможно, вообще не используете в своем веб-проекте).Я предпочитаю, чтобы в инфраструктурном проекте содержалось все, что связано со сквозными проблемами.Среди прочего, это включает в себя мой журнал и контейнер IoC.

0 голосов
/ 23 января 2011

Нет ничего плохого в том, что в вашем веб-проекте есть ссылка на DAL, если вы непосредственно не вызываете эту сборку.Но если вам неудобен такой подход, вы можете использовать Реестр на вашем бизнес-уровне, и есть типы регистров для DAL.Поскольку веб-уровень в любом случае должен иметь ссылку на бизнес-уровень, вы можете использовать этот реестр из бизнес-уровня при запуске веб-приложения

Вот пример кода

Класс реестра вваш слой Bsns

public class BusinessRegistry:Registry
{
    public BusinessRegistry()
    {
         For<IDALInterface1>().Use<DALImpl1>();
    }
}

и в методе запуска приложения

var container = new Container(x => x.AddRegistry(new BusinessRegistry()));
...