(Cette question ne repose pas sur un cadre IoC spécifique, de sorte que les interfaces et types dans mes échantillons sont méta-types. Il suffit de les remplacer par les types appropriés pour votre cadre IoC préféré dans votre tête.)Injection de dépendances: Comment faire passer le conteneur d'injection?
Dans mon principales méthodes, je généralement mis en place mon conteneur faire quelque chose comme ceci:
static void Main()
{
IInjector in = new Injector();
in.Register<ISomeType>().For<SomeType>();
in.Register<IOtherType().For<OtherType>();
...
// Run actual application
App app = in.Resolve<App>();
app.Run();
}
ma question est, comment obtenez-vous Injector envoyé autour? Normalement, j'ai simplement enregistré l'injecteur avec lui-même et l'ai fait injecter dans des types qui vont eux-mêmes faire l'injection, mais je ne suis pas sûr que ce soit le «modèle» approprié.
Ok, que diriez-vous de ceci. L'App est un WinForm et a un bouton qui crée et montre un formulaire. Chaque fois que ce bouton est poussé, une nouvelle instance de ce formulaire doit être créée et affichée. Ce formulaire a des dépendances, il doit donc être résolu par le formulaire d'application pour chaque instanciation. Maintenant quoi? – Alex
@Alex: Dans ce cas, vous pouvez utiliser "Providers" (Factories spécialisées) que j'ai mentionné dans mon autre post. La différence entre l'injection d'un fournisseur et l'injection de tout l'injecteur est que cela limite fortement les dépendances indirectes «secrètes». IOW, il ne dégrade pas l'injecteur à un localisateur de service. –
@chris_l: Alors les "Providers" peuvent garder l'Injector, non? Sinon, nous avons simplement déplacé le problème ailleurs. – Alex