Czy prosty wtryskiwacz IOC obsługuje MVC 4 ASP.NET Web API?
Obecnie nie obsługuje interfejsu MVC4 Web API, ale wsparcie zostanie dodane w przyszłości. The integration guide zostanie zaktualizowany, gdy to się stanie.
UPDATE: Web API support dodano Simple wtryskiwacza 2.5.
W międzyczasie, można stworzyć swój własny System.Web.Http.Dependencies.IDependencyResolver
realizacji tego prostego wtryskiwacza. Poniżej jest wdrożenie do pracy z Web API w IIS gospodarzem środowiska:
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()
{
}
}
Ta implementacja implementuje żadnej scopingu, ponieważ trzeba korzystać z życia Per Web Api Request za wdrażanie scopingu wewnątrz internetowej gospodarzem środowiska (gdy wniosek może skończyć w innym wątku niż tam, gdzie się zaczęło).
Because of the way Web API is designed, bardzo ważne jest, aby jawnie zarejestrować wszystkie kontrolery Web API. Można to zrobić za pomocą następującego kodu:
var services = GlobalConfiguration.Configuration.Services;
var controllerTypes = services.GetHttpControllerTypeResolver()
.GetControllerTypes(services.GetAssembliesResolver());
foreach (var controllerType in controllerTypes)
{
container.Register(controllerType);
}
można zarejestrować SimpleInjectorHttpDependencyResolver
następująco:
// NOTE: Do this as last step, after registering the controllers.
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorHttpDependencyResolver(container);
Simple Injector 2.5 zawiera [pakiet integracji Web API] (https://simpleinjector.codeplex.com/wikipage?title=Web%20API%20Integration). – Steven