Unterstützt einfache Injektor IOC MVC 4 ASP.NET Web API?
Es hat derzeit keine Unterstützung für MVC4 Web API, aber Unterstützung wird in der Zukunft hinzugefügt werden. The integration guide wird aktualisiert, wenn dies passiert.
UPDATE: Web API support hat Simple Injector 2.5 hinzugefügt.
In der Zwischenzeit können Sie Ihre eigene System.Web.Http.Dependencies.IDependencyResolver
Implementierung für die einfache Injector erstellen. Unten ist die Implementierung mit Web-API in einer IIS-gehosteten Umgebung für die Arbeit:
public class SimpleInjectorHttpDependencyResolver :
System.Web.Http.Dependencies.IDependencyResolver
{
private readonly Container container;
public SimpleInjectorHttpDependencyResolver(
Container container)
{
this.container = container;
}
public System.Web.Http.Dependencies.IDependencyScope
BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
IServiceProvider provider = this.container;
return provider.GetService(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
IServiceProvider provider = this.container;
Type collectionType = typeof(IEnumerable<>).MakeGenericType(serviceType);
var services =(IEnumerable<object>)this.ServiceProvider.GetService(collectionType);
return services ?? Enumerable.Empty<object>();
}
public void Dispose()
{
}
}
Diese Implementierung implementiert kein Scoping, da Sie für die Implementierung Scoping in einer Web-Hosting-Umgebung die Per Web Api Request Lebensdauer verwenden müssen (wenn ein Antrag enden kann auf einem anderen Thread als wo es angefangen hat).
Because of the way Web API is designed, es ist sehr wichtig, alle Web-API-Controller explizit zu registrieren. Sie können dies mit dem folgenden Code:
var services = GlobalConfiguration.Configuration.Services;
var controllerTypes = services.GetHttpControllerTypeResolver()
.GetControllerTypes(services.GetAssembliesResolver());
foreach (var controllerType in controllerTypes)
{
container.Register(controllerType);
}
Sie können die SimpleInjectorHttpDependencyResolver
registrieren Sie wie folgt vor:
// NOTE: Do this as last step, after registering the controllers.
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorHttpDependencyResolver(container);
Simple Injector 2.5 enthält ein [Web-API-Integrationspaket] (https://simpleininjektor.codeplex.com/wikipage?title=Web%20API%20Integration). – Steven