2 Stimmen

Wie kann ich MEF mitteilen, welchen Typ ich für diese Schnittstelle benötige?

Ich habe Folgendes:

public interface IEmailService
    {
        bool SendEmail(MailMessage message);
    }

[Export(typeof(IEmailService))]
    public class SmtpEmailService : IEmailService
    {
}

[Export(typeof(IEmailService))]
    public class AmazonEmailService : IEmailService
    {
}

Wie importiere ich eine bestimmte Datei auf der Grundlage bestimmter Kriterien?

Wenn ich z. B. den Dienst verwende, habe ich so etwas wie das hier:

public class MobileService
    {
        [Import] 
        public IEmailService EmailService { get; set; }

Gibt es eine Möglichkeit, MEF in der Konfigurationsdatei oder an anderer Stelle so zu konfigurieren, dass es automatisch WISSEN kann, welche Version von EmailService zu importieren?

0 Stimmen

Ich denke, Sie können alle in einer Sammlung zusammenfassen und dann anhand Ihrer Konfigurationsdatei die gewünschte Option auswählen. Sollte einfach genug sein, um Code.

1 Stimmen

Was würde das bringen? Der Zweck von MEF ist es, Add-in-Szenarien zu unterstützen, so dass der Verbraucher nicht eine bestimmte Abhängigkeit vorschreiben sollte...

3voto

VSS Punkte 7962

Sie können den Namen des Vertrags in Ihrem Export Attribut beim Exportieren und verwenden Sie dann einen der exportierten Namen in Ihrem Import Attribut wie unten:

[Export("SmtpEmailService", typeof(IEmailService))]
public class SmtpEmailService : IEmailService {
}

[Export("AmazonEmailService", typeof(IEmailService))]
public class AmazonEmailService : IEmailService {
}

[Import("AmazonEmailService")]
public IEmailService EmailService { get; set; } //Import a specific type

Falls Sie auch ImportMany verwenden möchten, lesen Sie den Abschnitt Exporte und Metadaten en http://mef.codeplex.com

Es gibt auch eine ähnliche SO Frage die Ihnen helfen sollten.

0 Stimmen

Ich danke Ihnen! Ich denke, das ist eine Antwort. Ich hatte gehofft, für einige Code-less-Config-Szenario, wo ich in meinem sagen würde web.config was MEF importieren soll. Auf diese Weise würde ich es auf der Grundlage, wo ich Host-Lösung wechseln.

0 Stimmen

@katit ja ich glaube, einige .config Lösung existiert, aber im Moment habe ich keine Kenntnisse und Referenzen über sie, Sie müssten es ein bisschen mehr googeln

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