Dependency injection DependencyResolver:传递参数
我使用autofac,可以将参数传递给我的解析方法 如何使用microsofts DependencyResolver接口实现这一点?不支持直接传递参数,我相信您已经注意到了。但是,由于您的引擎盖下有Autofac,因此您可以解析一个factory委托,该委托使您能够将参数传递给基础服务:Dependency injection DependencyResolver:传递参数,dependency-injection,asp.net-web-api,autofac,Dependency Injection,Asp.net Web Api,Autofac,我使用autofac,可以将参数传递给我的解析方法 如何使用microsofts DependencyResolver接口实现这一点?不支持直接传递参数,我相信您已经注意到了。但是,由于您的引擎盖下有Autofac,因此您可以解析一个factory委托,该委托使您能够将参数传递给基础服务: var factory = dependencyResolver.GetService<Func<int, string, IService>>(); var service = fa
var factory = dependencyResolver.GetService<Func<int, string, IService>>();
var service = factory(5, "42");
通过此设置,我们的X
服务将仅在http范围内可用。尝试从应用程序范围解析X
将失败,并显示以下消息:
从作用域中看不到标记与“http”匹配的作用域
其中请求了实例
从请求
范围解析将按预期工作:
var f = request.Resolve<Func<IX>>();
var x = f();
var f=request.Resolve();
var x=f();
不支持直接传递参数,我相信您已经注意到了。但是,由于您的引擎盖下有Autofac,因此您可以解析一个factory委托,该委托使您能够将参数传递给基础服务:
var factory = dependencyResolver.GetService<Func<int, string, IService>>();
var service = factory(5, "42");
通过此设置,我们的X
服务将仅在http范围内可用。尝试从应用程序范围解析X
将失败,并显示以下消息:
从作用域中看不到标记与“http”匹配的作用域
其中请求了实例
从请求
范围解析将按预期工作:
var f = request.Resolve<Func<IX>>();
var x = f();
var f=request.Resolve();
var x=f();
一般建议是解决工厂问题。要么为需要解析的类型定义自定义工厂接口(这是我的首选),要么解析委托(这是Peter Lillevold建议的)。无论哪种方式,您都不应该直接调用容器(或为此而调用依赖解析程序),因为这是。一般建议是解析工厂。要么为需要解析的类型定义自定义工厂接口(这是我的首选),要么解析委托(这是Peter Lillevold建议的)。无论哪种方式,您都不应该直接调用容器(或dependencysolver
),因为这是一个好主意。这似乎是一个好主意,但如果我使用不同的上下文,这会起作用吗?OBJCT应注册为.instancePerhtPrequest();或.InstancePerApiRequest()@user437899-添加了一些关于生存期范围的输入。希望它澄清:)这似乎是一个好主意,但如果我使用不同的上下文,这会起作用吗?OBJCT应注册为.instancePerhtPrequest();或.InstancePerApiRequest()@user437899-添加了一些关于生存期范围的输入。希望它能澄清:)