English Deutsch

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();