2 Stimmen

Registrierung von Typen in IModule und Kapselungsproblem

Die übliche Prism-Methode zur Entwicklung komplexer Anwendungen besteht darin, dass jedes Modul eine IModule-Schnittstelle implementiert, um sich selbst zu initialisieren, damit es funktionieren kann. In den meisten Fällen geht es bei dieser "Initialisierung" darum, einige Typen bei einem IoC-Container zu registrieren. In unserem Fall sieht IModule also normalerweise so aus:

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.
    }
}

Unsere Module haben normalerweise nur einen (oder sehr wenige) öffentliche Typen und viel mehr interne Klassen/Abhängigkeiten, die registriert werden müssen.

Ich bin ein wenig besorgt, ob dieser Ansatz das Prinzip der Kapselung durchbricht? Es scheint, dass wir alles (sowohl interne als auch öffentliche Typen) innerhalb eines globalen Containers registrieren, was die Grenze des Moduls verwischen könnte (die Registrierung öffentlicher und interner Typen ist völlig gleich) und es potenziell möglich macht, unsere "internen" Klassen an anderen Stellen aufzulösen.

Ist es nicht besser, interne Abhängigkeiten innerhalb eines ChildContainers zu registrieren?

Oder machen wir vielleicht etwas völlig falsch? :)

2voto

anivas Punkte 6379

Ihre Frage hat die Antwort Module registrieren ihre Ansichten und Ansichtsmodelle in untergeordneten Container. Nur gemeinsam nutzbare Dienste werden im globalen Container registriert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X