Il supporto IOC Inject semplice supporta MVC 4 ASP.NET Web API?
Attualmente non ha supporto per MVC4 Web API, ma il supporto verrà aggiunto in futuro. The integration guide verrà aggiornato quando ciò accade.
UPDATE: Web API support è stato aggiunto alla semplice Injector 2.5.
Nel frattempo, è possibile creare il proprio System.Web.Http.Dependencies.IDependencyResolver
implementazione per l'iniettore semplice. Qui di seguito è l'implementazione per l'utilizzo di API Web in un ambiente ospitato IIS:
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()
{
}
}
Questa implementazione implementa senza scoping, dal momento che è necessario utilizzare la durata Per Web Api Request per l'attuazione di scoping all'interno di un ambiente web hosting (dove a richiesta può finire su un thread diverso da quello in cui è stato avviato).
Because of the way Web API is designed, è molto importante registrare esplicitamente tutti i controller API Web. È possibile farlo utilizzando il seguente codice:
var services = GlobalConfiguration.Configuration.Services;
var controllerTypes = services.GetHttpControllerTypeResolver()
.GetControllerTypes(services.GetAssembliesResolver());
foreach (var controllerType in controllerTypes)
{
container.Register(controllerType);
}
È possibile registrare il SimpleInjectorHttpDependencyResolver
come segue:
// NOTE: Do this as last step, after registering the controllers.
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorHttpDependencyResolver(container);
semplice Injector 2.5 contiene un [pacchetto Web API di integrazione] (https://simpleinjector.codeplex.com/wikipage?title=Web%20API%20Integration). – Steven