1

我正在尝试使用服务堆栈的缓存设施。这些是通过 RequestContext 访问的,它由 IOC 在您的 Service 中注入。

如果您使用默认的 Funq IOC,这将按预期工作,当您挂接 AutoFac 时它不起作用,RequestContext 为空,我不确定如何配置 autofac 来构建它。这里有什么线索吗?我的 AutoFac 配置:

var builder = new ContainerBuilder();

//Now register all dependencies to your custom IoC container

builder.RegisterAssemblyTypes(new[] { typeof(AppHost).Assembly })
       .PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies)
       .AsImplementedInterfaces()
       .SingleInstance();

container.Register<ICacheClient>(new MemoryCacheClient());

IContainerAdapter adapter = new AutofacIocAdapter(builder.Build());
container.Adapter = adapter;

编辑:

我的服务已经扩展了 ServiceStack.ServiceInterface.Service:

public class UserDetailsService : ServiceStack.ServiceInterface.Service

它实现了 IRequiresRequestContext,RequestContext 为空。如果我删除 autofac,那么它会按预期工作。使用 Autofac RequestContext 为空

4

1 回答 1

1

RequestContext 并不意味着由 IOC 注入,它是由 ServiceStack 设置的特殊属性,如果您的服务通过实现IRequiresRequestContext接口来请求它。例如

public class MyClass : IService, IRequiresRequestContext {
    //injected by ServiceStack at run-time (per request)
    public IRequestContext RequestContext { get; set; } 
}

这与在 ServiceStack 中方便的默认服务基类中填充 RequestContext 属性的机制相同。

于 2013-01-24T07:39:50.337 回答