1

Ich habe eine Schnittstelle und ich möchte ein Factory-Muster, um verschiedene Implementierer der Schnittstelle instanziieren. Aber ich möchte die Details des Implementierers, der in der Konfigurationsdatei instanziiert werden soll, herausfinden. Ich möchte es in der Art der RoleProvider-Konfiguration haben:.NET Configurable Interface-Implementierung

<section name="MembershipProvider" type="MyOwn.UserManagement.Providers.MembershipProvider.CustomMembershipProviderConfigurationSection,MyOwn.UserManagement.Providers.MembershipProvider" allowDefinition="MachineToApplication" /> 

So ist es eine Art Abhängigkeit Technik Injektion. Kann mir jemand helfen?

Edit:

Die tatsächliche Situation ist wie folgt:

Ich habe eine Schnittstelle IDataExchange und will es mit verschiedenen Baugruppen für verschiedene Kunden implementieren. So könnte ich zwei Assemblys haben, die Klassen implementieren IDataExchange sagen, DataExchange1 und DataExchange2. Jetzt, wenn ich es deploye, abhängig davon, welchen Kunden ich es zur Verfügung stelle, möchte ich die Details der Baugruppe (entweder DataExchange1 oder DataExchange2) in der Konfigurationsdatei einstellen. Dies ermöglicht es mir oder jedem Entwickler, neue Assemblys zu schreiben, die IDataExchange für jede erforderliche Änderung implementieren, wenn die Instanziierungsentscheidung automatisch durchgeführt wird.

Also wie kann ich es tun?

Meine Implementierung:

Dank Ihnen allen. Und besonderer Dank an @Pauli Østerø

Ich habe Stichwort von Ihren Antworten genommen und implementiert, um eine Lösung.

In der Konfigurationsdatei hinzugefügt ich folgende:

<add key="Exchanger" value="DExchanger.DExchange1, DExchanger.DExchange1"/> 

ich eine Klasse (arbeiten als DI-Container oder das abstrakte Werk) gegeben. Die Klasse ist DIContainer die folgende Methode enthält:

public IDataExchange CreateInstance(string config) 
{ 
    var type = Type.GetType(config); 
    return (IDataExchange)Activator.CreateInstance(type); 
} 

Und während ich instanziiert wird, schreibe ich die folgende:

var config = ConfigurationManager.AppSettings.Get("Exchanger"); 
    DIContainer x = new DIContainer(); 
    var instance = x.CreateInstance(config); 

    Console.Write("Provide your input please: "); 
    string inp=Console.ReadLine(); 
    Console.WriteLine(instance.DoDataExchange(inp)); 
    Console.ReadLine(); 

Und dieser gibt mir das Ergebnis, das ich suchte.

Ich bitte Sie alle, Ihr Feedback für weitere Verbesserungen zu setzen.

+0

was Sie genau zu fragen? Jetzt haben Sie den Abschnitt und einen Typ definiert, um damit umzugehen. Je nachdem, in welcher Gruppe Ihr Bereich definiert ist, müssen Sie die tatsächlichen Konfigurationsdaten weiter unten in Ihrer Konfigurationsdatei hinzufügen. –

+0

@Pauli Østerø: Redigierte meine Post, um zu klären, was ich wissen wollte. – Kangkan

+0

@Pauli Østerø: Ist meine Implementierung etwas in der Nähe eines DI? – Kangkan

Antwort

1

eine Eigenschaft in Ihre CustomMembershipProviderConfigurationSection namens Type so können Sie es wie diese Datei

<group> 
    <MembershipProvider type="... my concrete type" /> 
</group> 

Auf Ihrem CustomMembershipProviderConfigurationSection erstellen Sie eine Methode in der Config konfigurieren CreateInstance benannt IDataExchange zurückgibt.Der Körper des Verfahrens ist ziemlich einfach

public IDataExchange CreateInstance() 
{ 
    var type = Type.GetType(this.Type); 
    return (IDataExchange)Activator.CreateInstance(type); 
} 

und wenn Sie eine IDataExchange Referenz benötigen, schreiben Sie

var config = (CustomMembershipProviderConfigurationSection)ConfigurationManager.GetSection("group/MembershipProvider"); 
var instance = config.CreateInstance(); 
+0

Ich konnte nicht verstehen, wie ich die CreateInstance-Methode in CustomMembershipProviderConfigurationSection erstellen kann. Kannst du bitte etwas ausarbeiten? – Kangkan

+0

CustomMembershipProviderConfigurationSection ist eine Klasse ... eine normale .net-Klasse, in die Sie normale Methoden schreiben können. –

0

Sie sollten sich MEF ansehen. Clickity click

Es sollte genau das tun, was Sie suchen.

+1

MEF hat keine integrierte Unterstützung für die XML-Konfiguration. –