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.
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. –
@Pauli Østerø: Redigierte meine Post, um zu klären, was ich wissen wollte. – Kangkan
@Pauli Østerø: Ist meine Implementierung etwas in der Nähe eines DI? – Kangkan