0
A
回答
3
IDependencyResolver不支持直接传递参数,因为我相信你已经注意到了。不过,既然你有Autofac在引擎盖下,你能解决工厂的委托,使您能够在参数传递到底层服务:
var factory = dependencyResolver.GetService<Func<int, string, IService>>();
var service = factory(5, "42");
注意:您可以使用Func
委托或明确定义工厂与会代表。更多关于here。
关于生命周期范围:必须从能够“达到”所请求服务的范围解决工厂代理。考虑这个设置模拟MVC还是怎么的WebAPI会是什么样子:
var cb = new ContainerBuilder();
cb.RegisterType<X>().InstancePerMatchingLifetimeScope("http");
var application = cb.Build();
var request = application.BeginLifetimeScope("http");
在此设置下,我们的X
服务将只能在HTTP范围内都有效。试图从application
范围解决X
将失败,此消息:
没有范围与标签配套的“http”是其中要求该实例的范围 可见。
从request
范围解决将如预期:
var f = request.Resolve<Func<IX>>();
var x = f();
0
一般的建议是解决一个工厂。要么为您需要解决的类型定义自定义工厂界面(这有我的偏好),要么解决委托(这是Peter Lillevold建议的)。无论哪种方式,您都不应直接致电容器(或DependencyResolver
),因为这是sub optimal。
相关问题
- 1. Ninject.MVC3,将DependencyResolver传递给服务层?
- 2. 参数传递
- 3. 传递参数
- 4. 传递参数
- 5. 传递参数
- 6. 参数传递
- 7. 传递参数
- 8. 传递参数
- 9. 传递参数
- 10. 传递参数
- 11. 传递参数
- 12. 传递参数
- 13. 传递参数
- 14. 参数传递
- 15. 传递参数
- 16. 传递参数
- 17. 传递参数
- 18. 参数传递
- 19. 参数传递
- 20. 传递参数
- 21. 按参数传递参数
- 22. 快递API。参数传递
- 23. jqModal传递参数
- 24. PowerShell:传递参数
- 25. javascript参数传递
- 26. 传递参数java8
- 27. 传递BASH参数
- 28. 参数传递2.0
- 29. Cmake传递参数
- 30. JQuery,传递参数
这似乎是一个好主意,但如果我使用不同的上下文将这项工作?这些objcts应该被注册为.InstancePerHttpRequest();或.InstancePerApiRequest(); – user437899 2012-08-22 09:10:20
@ user437899 - 在生命周期范围内添加了一些输入。希望它澄清:) – 2012-08-24 07:35:37