Wenn ich die Fabrik Muster richtig verstanden habe, könnte ich eine Fabrik haben meine Repos für die Erstellung, die eine Schnittstelle wie diese implementiert ...IoC und die Fabrik Muster
public interface IRepoFactory
{
T Get<T>() where T : IRepo
}
Und in dieser Fabrik ein Aufruf an RepoFactory.Get<IRepo1>()
wird Gibt eine neu geprägte Instanz einer Klasse zurück, die IRepo1 implementiert.
in der Definition von RepoFactory
So werde ich eine neue Instanz des entsprechenden Typs erstellen ...
switch(...)
{
case typeof(IRepo1):
return new Repo1();
}
Oder ich nehme an, ich kann einen Konstruktor für Repofactory
definieren, die als Parameter nimmt, ein Schnittstelle alle möglichen Rückgabetypen repräsentieren ...
public RepoFactory(IRepo1 repo1, IRepo2 repo2, ..., IRepoN repoN) : IRepoFactory
und mein IoC-Container, die Arbeit zu schaffen, um die Klassen tun.
Also, zu meiner Frage. Wenn ich tun einen Konstruktor wie oben erstellen, bedeutet das nicht, dass jedes Mal, wenn ich IRepoFactory
als Konstruktor-Parameter ich eine neue Instanz von Repo1, Repo2, ..., RepoN? Ist das ein ressourcenintensiver Prozess? Ist es eine verschwenderische Art, Dinge zu tun, wenn ich im gegebenen Fall wahrscheinlich nur einen Teil der Gesamtzahl der verfügbaren Repos benötige?
Gibt es eine Möglichkeit, den IoC (Unity, in meinem Fall) nur eine Instanz zu dem Zeitpunkt zu erstellen, wenn es benötigt wird, ein Lazy Loading, wenn Sie so wollen? Oder mache ich mir einfach Sorgen um nichts?
Ich habe nicht Unity verwendet, aber Autofac und StructureMap können beide Objektfabriken aus der Box injizieren. Machen Sie den Konstruktorparameter einfach zu einer Funktion, z. B. MyClass (Func> RepoFactory). Dann können Sie in der Klasse, die die Abhängigkeit übernimmt, var repo = repoFactory() sagen, und Sie erhalten eine neue Instanz. Unity kann eine ähnliche Funktion haben. –
Nelson
Ich werde noch einmal durch die Dokumentation wühlen, @Nelson, Ta. –