МОК в проектах визуальной студии? - PullRequest
1 голос
/ 27 августа 2010

Я пытаюсь вписаться (плохая идея, я знаю, но лучше поздно, чем никогда) IOC и DI в существующее решение.

База кода состоит из примерно 30 проектов, в каждом из которых есть классы, которые практически не видны внешнему миру.Будучи относительно новым для IOC, я пытаюсь использовать передовой опыт при переработке кода, и, кажется, лучше не передавать контейнер IOC и не делать его статичным, поэтому я пытаюсь сделать все с помощью инжектора конструктора.*

Однако, и здесь возникает мой вопрос, я должен сделать очень большое количество классов публичными для всех проектов (т.е. физических файлов .csproj).Я должен сделать это, потому что мой «модуль конфигурации» (я использую Ninject, но это вопрос, не связанный с IOC) должен знать обо всем в любом классе в любом проекте, чтобы иметь возможность разрешать зависимости.

Я что-то упустил?Все мои классы должны быть открытыми, если они основаны на интерфейсе?Могу ли я как-нибудь создать контейнер IOC для каждой из моих границ csproj и сделать это для меня?

Ta

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Не могли бы вы написать модуль конфигурации внутри каждого проекта и сделать его общедоступным?Затем настройте ninject со всеми модулями вместо одного ...

1 голос
/ 27 августа 2010

Я верю, что вы на правильном пути. В общем, любой IoC-контейнер должен знать (а) интерфейс и (б) реализацию, чтобы он мог все соединить. Обычно вы выполняете «разводку» в модулях более высокого уровня (в данном случае ваш проект модуля конфигурации); Модули более низкого уровня не должны знать обо всех возможных реализациях интерфейсов. Чтобы это произошло (и для облегчения тестирования), реализации должны быть открытыми.

Если бы вы действительно хотели, вы могли бы использовать InternalsVisibleTo, но я бы не стал. Если вы не используете IoC, вам все равно нужно сделать эти классы общедоступными.

Вы также можете посмотреть MEF ; очевидно, позволяет реализациям быть частными или внутренними .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...