Я пытаюсь выполнить ретро-установку (плохая идея, которую я знаю, но лучше поздно, чем никогда) IOC и DI в существующее решение.IOC через проекты визуальной студии?
База кода состоит из примерно 30 проектов, каждая из которых имеет классы в них, которые мало или вообще не имеют видимости для внешнего мира. Будучи относительно новым для IOC, я стараюсь использовать передовую практику при переработке кода, и лучше не пропускать контейнер IOC или статично, поэтому я пытаюсь сделать все через инъекцию конструктора.
Однако, и здесь возникает мой вопрос: мне нужно сделать много классов общедоступными в разных проектах (например, в файлах физического .csproj). Мне нужно это сделать, потому что мой «модуль конфигурации» (я использую Ninject, но это агностический вопрос IOC) должен знать обо всем в любом классе в любом проекте, чтобы иметь возможность разрешать зависимости.
Я пропустил что-то важное? Все ли мои классы должны быть общедоступными, если они основаны на интерфейсе? Могу ли я каким-то образом создать контейнер МОК для каждой из моих границ csproj и сделать для меня инъекцию?
Ta
Плюсы: Инкапсуляция. Минусы: каждый модуль теперь имеет зависимость от Ninject; конфигурация может быть более жесткой (что, если потребитель A хочет, чтобы IFoo был реализован Bar вместо Foo?); ни одного места, чтобы увидеть все сопоставления. – TrueWill