2016-11-24 2 views
2

У меня есть C# веб-апи проект, архитектура которого показана на следующей схеме (Projecta) enter image description hereКруговые ссылки на вопросы в C# WebAPI проекты

В приведенной выше диаграмме контроллеров в проекте A пользоваться услугами проекта А для того, для выполнения фактического задания, а Сервисы используют репозиторий для чтения и записи в базе данных. Все они используют инъекцию Autofac Dependency Injection. примеры: Конструктор контроллера, который использует различные услуги

public DKMenuController(ITokenService tokenService, IUserService userservice, IDKMenuService dkMenuService) 
    { 
     _tokenService = tokenService; 
     _dkMenuService = dkMenuService; 
     _userservice = userservice; 
    } 

конструктору службы, которая использует основной репозиторий для связи с БД

public DKMenuService(IRepository repository) 
    { 
     this._repository = repository; 
    } 

Различные услуги регистрируются при запуске приложения следующим

this.RegisterType<Repository>().As<IRepository>().InstancePerRequest(); 
this.RegisterType<DKMenuService>().As<IDKMenuService>().InstancePerRequest(); 

Теперь я хочу добавить еще один проект (названный в exa mple ProjectB), который является просто библиотекой классов и вызывается из службы ProjectA, что-то сделает, а затем будет использовать шаблон репозитория ProjectA и сохранить данные в БД. Проблема в том, что эта конструкция приводит к циклическим ссылкам, а 2 проекта не будут компилироваться. Существует аналогичный вопрос здесь How to solve circular reference? , но ответ не очень ясен, правильно ли он. Любые идеи?

+0

Там нет циклической зависимости в диаграмме. Можете ли вы прояснить, где круговая зависимость? – Enigmativity

+0

@ Энигматичность - посмотрите на заголовки, 2 _projects_ (столбцы) имеют круг. –

+0

@HenkHolterman - Какие заголовки? На диаграмме нет круга. Это ориентированный ациклический граф. – Enigmativity

ответ

0

Насколько я знаю, что вы показываете здесь, это не круговая ссылка. Вы не можете нарисовать круг по стрелкам на диаграмме.

Если классы репозитория находятся в Project A Services, то у вас есть круговая ссылка, но это не связано с вопросом. Имея это в виду, если это так переместить хранилище вне проекта А.

+1

На уровне класса ничто не является круговым, но на уровне Project/Assembly это было бы? –

+0

Я согласен с Питером Б. На уровне проекта/Assemly существует круговая ссылка. Предположим, что в Project A. существует ServiceA. Эта служба A инициирует новый объект службы B. ServiceB выполняет некоторые действия, а затем вызывает репозиторий Project's A для сохранения в БД. Если вы попытаетесь построить проект B, это не сработает, потому что ему нужны двоичные файлы из Project A для класса репозитория. Если вы попытаетесь сначала создать проект A, он будет терпеть неудачу, так как ему нужен B ServiceB класса Project –

+0

@ChristophAdamakis - Project A не имеет репозитория. Я не вижу цикла. – Enigmativity

2

Это может быть какой-то работы, но исправление было бы переместить Repository в новый ProjectRepo.

Тогда есть ProjectA и ProjectB как ссылка ProjectRepo, а затем ProjectA может также ссылаться на ProjectB без необходимости B A.

+0

Звучит неплохо, но мне нужно перепроектировать все :( –

+0

Это не должно требовать каких-либо «редизайнов». Просто немного подстраивайте и рефакторинг в реализации (-ях). –

Смежные вопросы