var services = GlobalConfiguration.Configuration.Services;
var controllerTypes = services.GetHttpControllerTypeResolver()
.GetControllerTypes(services.GetAssembliesResolver());
foreach (var controllerType in controllerTypes)
{
container.Register(controllerType);
}
您可以按如下方式注册 SimpleInjectorHttpDependencyResolver :
// NOTE: Do this as last step, after registering the controllers.
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorHttpDependencyResolver(container);
var container = new Container();
//Register you types in container here
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcAttributeFilterProvider();
var controllerTypes =
from type in Assembly.GetExecutingAssembly().GetExportedTypes()
where typeof(ApiController).IsAssignableFrom(type)
where !type.IsAbstract
where !type.IsGenericTypeDefinition
where type.Name.EndsWith("Controller", StringComparison.Ordinal)
select type;
foreach (var controllerType in controllerTypes)
{
container.Register(controllerType);
}
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
2 回答
它目前不支持MVC4 Web API,但将来会添加支持 . 发生这种情况时,会更新The integration guide .
UPDATE :Web API support已添加到Simple Injector 2.5中 .
在此期间,您可以为Simple Injector创建自己的
System.Web.Http.Dependencies.IDependencyResolver
实现 . 以下是在IIS托管环境中使用Web API的实现:此实现不实现作用域,因为您需要使用Per Web Api Request生存期在Web托管环境中实现作用域(其中请求可能在与其开始的不同的线程上结束) .
Because of the way Web API is designed,显式注册所有Web API控制器非常重要 . 您可以使用以下代码执行此操作:
您可以按如下方式注册
SimpleInjectorHttpDependencyResolver
:简短的回答是:是的,它有效 . 下面是适用于我的项目的代码片段,包括Web API和MVC4控制器(部分基于上面的Steven响应):
要访问API控制器中的类型,您可以使用以下代码段: