gpt4 book ai didi

StructureMap 依赖解析 : Manually get instance from ActionFilter

转载 作者:行者123 更新时间:2023-12-04 05:42:07 24 4
gpt4 key购买 nike

我正在尝试使用 StructureMap 来学习本教程:http://iridescence.no/post/Constructor-Injection-for-ASPNET-MVC-Action-Filters.aspx

我想弄清楚的是这一行的 StructureMap 等价物:

var container = (ICanResolveDependencies) HttpContext.Current.ApplicationInstance;

我想取回容器,以便我可以手动解决那里的依赖关系。

这就是我在 global.asax 中设置dependencyresolver的方式
            GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
new StructureMapDependencyResolver(container));

最佳答案

你可以只需要 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,但根据 this blog post ,你可以这样设置:
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 实例中。

关于StructureMap 依赖解析 : Manually get instance from ActionFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com