10 Stimmen

Ist Autofac ContainerBuilder.Build eine teure Angelegenheit?

Ich fange gerade an, Autofac zu benutzen und kann keine Antwort auf diese Frage finden.

Außerdem, wann sollte ich ContainerBuilder.Build() aufrufen?

Ist es nach dem Aufruf von ContainerBuilder.Build() möglich, einen anderen Typ oder eine andere Instanz zu registrieren?

5voto

Mark Seemann Punkte 216836

Ich kann Ihnen nicht sagen, ob die Build-Methode teuer ist oder nicht, aber wenn Sie die Registrieren Auflösen Freigabemuster ist es egal, denn Sie sollten nur eine einzelne Container-Instanz pro Antrag.

Sie müssen die Build-Methode aufrufen einmal um eine Container-Instanz zu bekommen, also egal wie teuer (oder nicht) sie ist, diese Kosten müssen Sie tragen . Wenn Sie jedoch nur eine einzige Instanz des Containers verwenden, müssen Sie Sie zahlen diese Kosten nur einmal .

4voto

Jonathan Oliver Punkte 5079

ContainerBuilder.Build() sollte in der Regel beim Start der Anwendung aufgerufen werden, bevor Sie mit dem eigentlichen Aufruf des Geschäftsverhaltens beginnen.

Wenn Sie zusätzliche Komponenten in einem bestehenden Container registrieren müssen, können Sie dies tun. Um dies in Autofac v2.2 (oder später) zu tun, können Sie einen weiteren ContainerBuilder-Instanzer erstellen und die Überladungsmethode ContainerBuilder.Build(IContainer) verwenden.

3voto

Tarek Khalil Punkte 395
ContainerBuilder _AutoFacContainerBuilder;
IContainer _AutoFacContainer;

_AutoFacContainerBuilder.RegisterType<MyClass>().Named<IMyClass>("MyNameOne");
_AutoFacContainer = AutoFacContainerBuilder.Build();

ContainerBuilder _AnotherBuilder;

_AnotherBuilder.RegisterType<MyClassTwo>().Named<IMyClassTwo>("MyNameTwo");
_AnotherBuilder.Update(_AutoFacContainer);

1voto

Bruno Shine Punkte 1011

In meinen Webanwendungen verwende ich eine HttpApplication-Basisklasse, die den Build beim Ereignis Application_Start aufruft. Ich verwende dann eine Mischung aus Module (auf jeder registrierungspflichtigen Baugruppe), eine Baugruppe "Scanner" y MVC-Integration .

Für die spätere Registrierung können Sie zum Beispiel die MEF-Integration oder, wie Jonathan sagte, die Überladung Build verwenden.

Ich hoffe, es hilft :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X