Nicht wirklich sicher, ob ich folgende bin die Frage c verwenden kann Normalerweise verweist das Repository jedoch auf ein Daten-Repository mit generischen Funktionen (Einfügen, Aktualisieren, Löschen usw.). autofac keyed services wird jedoch verwendet, um den Dienst mit Schlüsselnamen (oder einem beliebigen Schlüsseltyp) zu registrieren. Wenn dies der Fall ist, müssen Sie eine Lösung finden, die alle Ihre Repo
Typen finden und sie einzeln in einer Schleife registrieren kann. Dies könnte mit Reflection erreicht werden. Jedoch wird jedes Objekt Repo1
, Repo2
usw., eine gemeinsame Ableitung benötigen.
Zum Beispiel kann sagen, dass jedes Objekt Repo
derrives von der Schnittstelle IRepo
dann können wir Reflektion verwenden, um alle Instanzen der IRepo
Schnittstelle zu finden, wo der Typ a class
dann Schleife durch jede Instanz, um sie Ihren Behälter zu registrieren. Etwas wie.
var iRepoType = typeof(IRepo);
var repoTypes = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => type.IsClass && iRepoType.IsAssignableFrom(type))
.ToList();
foreach(var repoType in repoTypes)
{
builder.RegisterType(repoType).Keyed<IRepository>(repoType);
}
Jetzt persönlich dies macht keinen Sinn, wie wenn Sie in diesem Schlüsseldienst schauen Sie sagen, wenn ich in der Schlüssel typeof(Repo1)
passieren Ich möchte Repo1
. Ist das nicht das Gleiche, als wenn Sie jeden Repository-Typ ohne Keyed Services unterschiedlich registrieren würden?
Ich habe eine Antwort in Code-Review im Gespräch über Repository patterns and classes, die auch ein wenig Interesse sein kann geschrieben.
Warum benutzen Sie 'RegisterGeneric' nicht? –
Jedes Repository erbt von einem BaseRepository und von einer bestimmten Schnittstelle. Wie registriere ich all diese Repositories als generisch? –
Ich verstehe. Aber ich bleibe bei meinem Kommentar unten, getippte Registrierung und Auflösung von Repositories innerhalb der Einheit des Arbeitsobjekts ist nicht etwas, was ich tun würde. –