Inhalt
ASP.NET WebForms / MVC Integration
In Assembly LightCore.Integration.Web.dll unter 3 verschiedenen Namespaces finden Sie alles,
was sie bei der Benutzung von LightCore mit ASP.NET WebForms und ASP.NET MVC benötigen.
LightCore.Integration.Web Namespace
Der Namespace LightCore.Integration.Web bietet Basisfunktionen für die Nutzung von LightCore in ASP.NET WebForms Anwendungen.
ContainerAccessorNotImplementedException
Wird in ASP.NET WebForms zwar das DependencyInjectionModule eingepflegt, jedoch der Container nicht in der Global.asax-Klasse per IContainerAccessor implementiert,
wird die Exception ContainerAccessorNotImplementedException geworfen.
DependencyInjectionModule
Das DependencyInjectionModule stellt ein HttpModule zur Verfügung, welches die Dependency Injection in WebForms Anwendung Ausführt.
Dabei wird Property Injection benutzt, das ist übrigens der einzige Fall, wo mit LightCore Property Injection genutzt werden muss.
Das HttpModule muss dazu in der web.config registriert werden, und für IIS7 muss das Modulee auch unter System.webServer angegeben werden:
<add
name="LightCoreDependencyInjectionModule"
type="LightCore.Integration.Web.DependencyInjectionModule, LightCore.Integration.Web"/>
IContainerAccessor
Das Interface IContainerAccessor muss bei WebForms Anwendungen in der Global.asax-Klasse implementiert werden.
Dieses Interface hilft dem DependencyInjectionModule die aktuelle IContainer-Instanz zu finden.
public interface IContainerAccessor
{
IContainer Container { get; }
}
Desweiteren können Sie selber dieses Interface nutzen, um Instanzen per Service Locator aufzurufen.
Das ist beispielsweise bei den in ASP.NET MVC enthaltenen ActionFiltern-Attributen nötig.
IContainerAccessor accessor = (IContainerAccessor)HttpContext.Current.ApplicationInstance;
IContainer container = accessor.Container;
IUserService userService = container.Resolve<IUserService>();
LightCore.Integration.Web.Lifecycle
HttpRequestLifecycle
Die Klasse stellt einen Lebenszyklus für das Erzeugen von Instanzen mit LightCore bereit.
Wenn bei einer Registrierung diesen Lebenszyklus (Lifecycle) angegeben wird, leben angeforderte Instanzen nur wärend der Dauer eines HttpRequests.
Sie können auch eigene Strategien für einen Lebenszyklus implementieren, wenn sie die Schnittstelle ILifecycle
implementieren.
LightCore.Integration.Web.Mvc
Für ASP.NET MVC stellt LightCore in diesem Namespace Unterstützung bereit.
ControllerFactory
Um Dependency Injection in ASP.NET MVC nutzen zu können, muss die von LightCore mitgelieferte
ControllerFactory in der Global.asax registriert werden:
ControllerBuilder.Current.SetControllerFactory(new ControllerFactory(_container));
Der ControllerFactory-Konstruktor erwartet eine IContainer-Instanz der Anwendung (Oben "_container").
ControllerRegistrationModule
Um ASP.NET Controller in X Assemblies automatisch für die Nutzung von LightCore zu registrieren,
muss das ControllerRegistrationModule genutzt werden:
var builder = new ContainerBuilder();
ControllerRegistrationModule controllerModule = new ControllerRegistrationModule(new[] { Assembly.GetExecutingAssembly() });
builder.RegisterModule(mvcModule);
_container = builder.Build();