2015-08-11 3 views
1

Я использую Ninject, и с помощью Конструктора Injection:Constructor архитектура приложения Инъекции неправильно - Ninject

Примера моей проблемы

У меня есть два интерфейса с их реализацией.

1. IUsersProvider 
2. ICompaniesProvider 

Мне нужно использовать функции из UsersProvider в CompaniesProvider И от CompaniesProvider в UsersProvider

Так я создал Конструкторы в обоих классах:

public class UsersProvider : IUsersProvider 
    { 
     private readonly ICompaniesProvider _companiesProvider; 

     public UsersProvider(ICompaniesProvider companiesProvider) 
     { 
      _companiesProvider = companiesProvider; 
     } 
    } 

И

public class CompaniesProvider : ICompaniesProvider 
    { 
     private readonly IUsersProvider _usersProvider; 

     public UsersProvider(IUsersProvider usersProvider) 
     { 
      _usersProvider = usersProvider; 
     } 
    } 

Теперь этот код компилируется нормально, но с точки зрения архитектуры это неверно (это похоже на круговую ссылку). Ninject генерирует исключение, когда я запускаю этот код:

Каков наилучший способ обработки сценария использования функций из каждого класса в другом?

+0

Вы можете использовать функцию впрыска для 1 класса, чтобы решить эту проблему. – Chino

ответ

4

Правильный способ справиться с таким сценарием будет реорганизовать один или оба интерфейсы/классов, так что они не зависят друг от друга. Трудно посоветовать более подробно, не видя кода каждого, но обычно, если вы оказываетесь в этой ситуации, один или оба ваших класса делают слишком много, то есть нарушают принцип единой ответственности. разделите интерфейс, чтобы он делал только одно, а затем ваши зависимости должны были проясняться.

+0

Я создал отдельный интерфейс, поэтому оба провайдера называют этот интерфейс. –

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