Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Simple Injector是否支持MVC 4 ASP.NET Web API?_C#_.net_Ioc Container_Simple Injector - Fatal编程技术网

C# Simple Injector是否支持MVC 4 ASP.NET Web API?

C# Simple Injector是否支持MVC 4 ASP.NET Web API?,c#,.net,ioc-container,simple-injector,C#,.net,Ioc Container,Simple Injector,我不熟悉简单的容器。我将开始在一个需要使用MVC4ASP.NETWebAPI实现多租户ASP.NETMVC的项目中工作 我的问题是:简单注入器是否支持MVC4ASP.NETWebAPI?阅读简单的注入器文档,例如参考MVC 3,我想知道是否也支持MVC 4 Simple injector IOC是否支持MVC 4 ASP.NET Web API 它目前不支持MVC4 Web API,但将在将来添加支持。将在发生此情况时更新 更新:已添加到简易喷油器2.5中 同时,您可以为这个简单的注入器创建

我不熟悉简单的容器。我将开始在一个需要使用MVC4ASP.NETWebAPI实现多租户ASP.NETMVC的项目中工作

我的问题是:简单注入器是否支持MVC4ASP.NETWebAPI?阅读简单的注入器文档,例如参考MVC 3,我想知道是否也支持MVC 4

Simple injector IOC是否支持MVC 4 ASP.NET Web API

它目前不支持MVC4 Web API,但将在将来添加支持。将在发生此情况时更新


更新:已添加到简易喷油器2.5中


同时,您可以为这个简单的注入器创建自己的
System.Web.Http.Dependencies.idependencysolver
实现。以下是在IIS托管环境中使用Web API的实现:

公共类SimpleInjectorHttpDependencyResolver:
System.Web.Http.Dependencies.IDependencyResolver
{
专用只读容器;
公共SimpleInjectorHttpDependencyResolver(
集装箱(集装箱)
{
this.container=容器;
}
public System.Web.Http.Dependencies.IDependencyScope
BeginScope()
{
归还这个;
}
公共对象GetService(类型serviceType)
{
IServiceProvider provider=this.container;
返回提供程序.GetService(serviceType);
}
公共IEnumerable GetServices(类型serviceType)
{
IServiceProvider provider=this.container;
类型collectionType=typeof(IEnumerable)。MakeGenericType(serviceType);
var services=(IEnumerable)this.ServiceProvider.GetService(collectionType);
返回服务??可枚举的.Empty();
}
公共空间处置()
{
}
}
此实现不实现作用域,因为您需要使用生存期在web托管环境中实现作用域(其中请求可能在不同于其开始的线程上结束)

,显式注册所有Web API控制器非常重要。可以使用以下代码执行此操作:

var services=GlobalConfiguration.Configuration.services;
var controllerTypes=services.GetHttpControllerTypeResolver()
.GetControllerTypes(services.GetAssembliesResolver());
foreach(controllerTypes中的var controllerType)
{
容器。寄存器(控制器类型);
}
您可以注册
SimpleInjectorHttpDependencyResolver
,如下所示:

//注意:注册控制器后,作为最后一步执行此操作。
GlobalConfiguration.Configuration.DependencyResolver=
新的SimpleInjectorHttpDependencyResolver(容器);

简单的回答是:是的,它可以工作。下面是适用于我的Web API和MVC4控制器项目的代码片段(部分基于上面Steven的回答):

要访问API控制器中的类型,可以使用以下代码段:

DependencyResolver.Current.GetService<InterfaceName>()
DependencyResolver.Current.GetService()

我的另一个问题是:使用简单的注入器可以避免反射吗?提示中的代码更正:“GetAllInstance”更正为“GetAllInstances”。不幸的是,所以需要6个以上的字符来进行编辑,但有人应该告诉他们,对于代码,计算机是不可原谅的,这样的打字错误应该被捕获并编辑更正。Simple Injector 2.5包含一个。
DependencyResolver.Current.GetService<InterfaceName>()