我正在使用ReuseScope.Request
注册服务,在某些情况下(如下所示)我得到例外:
Error trying to resolve Service 'Ceco.ServiceStack.TestService.TestService' or one of its autowired dependencies (see inner exception for details).
基本上这个注册:
container.RegisterAutoWiredAs<FakeAgent, IAgent>().ReusedWithin(ReuseScope.Request);
服务需要:
public class TestService : Service {
private readonly IAgent _agent;
public TestService(IAgent agent) {
_agent = agent;
}
public object Get(TestRequest request) {
return _agent.Process(request);
}
}
在Windows上通过MS.NET与Web应用程序和自托管主机一起工作。
在Ubuntu 14.04上通过Mono 3.2.8 Web应用程序就可以了。具有自主主机的控制台应用程序(已选中所有三个:AppSelfHostBase
,AppHostHttpListenerPoolBase
和AppHostHttpListenerSmartPoolBase
)正在抛出上述异常。如果我将ReuseScope
更改为None
它会停止投诉,但这不是我想要的,显然......
我正在使用ServiceStack 4.0.20。上面的代码按预期工作在3.9.71。可用于重现此代码的代码位于a github repo。
问题:这是一个错误,如果是 - 是否有解决方法或我应该坚持3.9.71?
UPDATE1:
似乎我不能强迫ServiceStack向我展示内部异常。当我添加Configure
时:
Config.DebugMode = true;
Config.ReturnsInnerException = true;
它只返回以下堆栈跟踪(对于内部异常,我认为不,但只是因为无法解析实现IAgent
服务的类的实例而导致的一般失败) :
Stack Traceat Funq.Container.ResolveImpl(string,bool)&lt; 0x0010b&gt;在Funq.Container.ResolveNamed(字符串)&lt; 0x00033&gt;在Funq.Container.Resolve()&lt; 0x00027&gt; at(wrapper dynamic-method)object.lambda_method(System.Runtime.CompilerServices.Closure,Funq.Container)&lt; 0x00024&gt;在ServiceStack.Host.ContainerResolveCache.CreateInstance(System.Type,bool)&lt; 0x00123&gt; at ServiceStack.Host.ContainerResolveCache.CreateInstance(System.Type)&lt; 0x0001f&gt;在ServiceStack.Host.ServiceController /&lt;&gt; c__DisplayClass11.b__f(ServiceStack.Web.IRequest,object)&lt; 0x000a1&gt;在ServiceStack.Host.ServiceController.Execute(object,ServiceStack.Web.IRequest)&lt; 0x000af&gt;在ServiceStack.HostContext.ExecuteService(object,ServiceStack.Web.IRequest)&lt; 0x0005f&gt; at ServiceStack.Host.Handlers.ServiceStackHandlerBase.ExecuteService(object,ServiceStack.Web.IRequest)&lt; 0x0001b&gt;在ServiceStack.Host.RestHandler.GetResponse(ServiceStack.Web.IRequest,object)&lt; 0x00077&gt; at ServiceStack.Host.RestHandler.ProcessRequestAsync(ServiceStack.Web.IRequest,ServiceStack.Web.IResponse,string)&lt; 0x005e8&gt;
答案 0 :(得分:2)
获取RequestContext以使用ThreadStatic的选项有been added in ServiceStack v4.0.21,例如:
RequestContext.UseThreadStatic = true;