Laden...

MEF und meine Probleme mit dem Design

Erstellt von Ahrimaan vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.023 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren
MEF und meine Probleme mit dem Design

Hallo zusammen,

ich ahbe ein kleines Problem :

Meine Anwendung soll nun per MEF Addons bekommen.
Besser gesagt mehrere neue Klassen.
Das Programm sucht an vorgegebenen Orten nach Dateien und verarbeitet die .

Ich habe nun für verschiedene Files mehrere Klassen
Diese Klassen rufen eine generische FileSearcherklasse auf.

So nun zum Problem : Wenn ich nun per MEF immer neue Klassen nachschiebe müssen die ja zwangsläufig jede diese Filesearcherklasse implementieren, also muss ich jeder DLL diese Klasse mitgeben.
Das würde aber gegen die Prinzipien sprechen wie DRY etc.

Wie Löse ich das ganze nun am klügsten ?

Grüße

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Ahrimaan,

dein Text ist sehr unverständlich formuliert. Kannst du uns ein wenig Beispielcode zeigen? Ich würde an deiner Stelle soviel wie möglich abstrahieren, so dass man mehr Flexibilität hat. Aber so richtig habe ich immer noch nicht verstanden, wo genau dein Problem liegt.

zero_x

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren

Hi Ok Sorry also :

Program -> (siehe Anhang)

Das ist die GUI für das Programm
Dieses Programm soll universell, je nach Dateinhalt Daten verarbeiten und Daten versenden .

So sieht zB eiune dieser Klassen aus .

 class HaymarketFileReader:IFileReader
    {
        private readonly string _ExportFolder;

        public event EventHandler<LogEventArgs> OnLogEntry;
        public event EventHandler<ErrorEventArgs> OnError;
        public event EventHandler<FileSendEventArgs> OnFileSend;

public void StartSearch()
        {
            var fileSearcher = new FileSearcherFtp();
            fileSearcher.OnError += new EventHandler<ErrorEventArgs>(fileSearcher_OnError);
            fileSearcher.OnSearchComplete += new EventHandler<FileSearchEventArgs>(fileSearcher_OnSearchComplete);
        }
}

Und genau diese Klassen sollen als DLL ausgelagert werden Knackpunkt : Jede Klasse soll den FileSearcher nutzen.
Dieser liegt aber wiederrum in einer anderen DLL.

Und da liegt mein Problem wie binde ich das am günstigsten mit MEF ein ?

Hoffe du hast das jetzt ein wenig besser verstanden.

Grüße

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Ahrimaan,

exportiere _HaymarketFileReader _als IFileReader. _IFileReader _packst du am besten in eine sparate Library. Die anderen DLLs referenzierst du auf diese Library und importierst das Interface. In der Hauptanwendung sagst du, dass auch diese Library - neben den anderen auch - verwendet verwenden soll. Alles packst du dann also in einen Container. Stichwort: AggregateCatalog.

zero_x

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren

Hi,

also wenn ich das richtig verstanden habe :

Interface IFileReader in eine DLL packen.

Alle FileReader wie HaymarketFileReader referenzieren diese DLL.

Und im Host lade ich dann alle vom Typ IFileReader rein .

Richtig ?

Das würde aber auch bedeuteten das jede FileReader irgendwie noch den FileSearcher kriegen muss.
Wobei : Ich kann den FileSearcher als Klasse in den Host mit reinknallen und den dann als Interface an die jeweiligen Klassen übergeben oder ?
Quasi als Dependency Injection ?
Oder macht es dann eher Sinn die "gesuchten" Dateien den jeweiligen Implementierungen von IFileReader zu übergeben ?

Grüße

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Ahrimaan,

in anderen Worten: Pack alle Interfaces in eine Library. Diese Library kann von anderen Extensions referenziert werden. Der Vorteil ist, dass die Extensions nur das Interface kennen, die konkrete Implementierung allerdings nicht. Dort packst du wirklich alle Interfaces rein. Die Extensions exportieren sich dann selbst auf das Interface oder importieren selber andere Extensions.

Der Container löst ja eh alle Abhänigkeiten, da brauchst du dir also keine Sorgen machen. Du importierst, was du brauchst, du exportierst, was die anderen brauchen.

Das Thema "Dependency Injection" ist ein Thema für sich. An der Stelle würde ich lieber einen weiteren Thread eröffnen. Das wäre eine Diskussion für sich. Ob MEF jetzt ein IoC- oder ein DI-Container ist, ist halt die Frage ... . Aber das lassen wir mal lieber außen vor.

zero_x

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren

Hi ,

danke für die Tipps.

Ich mache dann mal nen Thread auf 😉