您可能只需要IContainer
在您的操作过滤器的构造函数中依赖。如果它不是由 自动注册的StructureMap
,您可以使用以下方式注册它:
For<IContainer>().Use<Container>();
编辑
选项1:你不能只使用类似的东西:
GlobalConfiguration.Configuration.ServiceResolver.GetService(...)
// or (not sure what would be the right syntax)
GlobalConfiguration.Configuration.ServiceResolver.Current.GetService(...)
一旦你设置了它,就必须有某种方法来检索当前的服务解析器。
选项 2:使用常规 MVC,您可以获得当前的解析器,如下所示:
DependencyResolver.Current
并像这样使用它:
DependencyResolver.Current.GetService()
看起来 WebAPI 不使用 DependencyResolver,但根据这篇博文,你可以这样设置:
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
// this override is needed because WebAPI is not using DependencyResolver to build controllers
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
DependencyResolver.Current.GetService,
DependencyResolver.Current.GetServices);
现在尝试DependencyResolver.Current
从您的操作过滤器中使用。
选项 3:直接使用ObjectFactory.GetInstance
- 在 MVC 项目中可能不是最好的主意,因为它应该已经封装在 IDependencyResolver 实例中。