Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection DependencyResolver:传递参数_Dependency Injection_Asp.net Web Api_Autofac - Fatal编程技术网

Dependency injection DependencyResolver:传递参数

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

我使用autofac,可以将参数传递给我的解析方法

如何使用microsofts DependencyResolver接口实现这一点?

不支持直接传递参数,我相信您已经注意到了。但是,由于您的引擎盖下有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();
不支持直接传递参数,我相信您已经注意到了。但是,由于您的引擎盖下有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-添加了一些关于生存期范围的输入。希望它能澄清:)