Регистрация типов в IModule и проблема инкапсуляции - PullRequest
2 голосов
/ 03 июля 2011

Обычный способ разработки сложных приложений Prism заключается в том, чтобы каждый модуль реализовывал интерфейс IModule для инициализации самого себя, чтобы он мог работать.В большинстве случаев эта «инициализация» в основном заключается в регистрации некоторых типов в контейнере IoC.Итак, в нашем случае IModule обычно выглядит следующим образом:

public class Module : IModule {
    private IUnityContainer _container;
    public Module(IUnityContainer container) {
        _container = container;
    }

    public void Initialize() {
        //register public types
        _container.RegisterType<IMyPublicInterface, MyImplementation>();


        //register internal dependencies
        _container.RegisterType<IInternalDependency1, InternalDependency1>();
        _container.RegisterType<IInternalDependency2, InternalDependency2>();
        //..etc.
    }
}

Наши модули обычно имеют только один (или очень мало) открытых типов и гораздо больше внутренних классов / зависимостей для регистрации.

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

Не лучше ли зарегистрировать внутренние зависимости внутри ChildContainer?

Или, может быть, мы делаем что-то совершенно не так?:)

1 Ответ

2 голосов
/ 03 июля 2011

В вашем вопросе модули ответов регистрируют свои представления и видят модели в дочерних контейнерах.Только глобальные сервисы регистрируются в глобальном контейнере.

...