ReuseScope.Request不使用自带主机的单声道

时间:2014-05-28 13:38:39

标签: servicestack

我正在使用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应用程序就可以了。具有自主主机的控制台应用程序(已选中所有三个:AppSelfHostBaseAppHostHttpListenerPoolBaseAppHostHttpListenerSmartPoolBase)正在抛出上述异常。如果我将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;

1 个答案:

答案 0 :(得分:2)

获取RequestContext以使用ThreadStatic的选项有been added in ServiceStack v4.0.21,例如:

RequestContext.UseThreadStatic = true;