我正在尝试使用服务堆栈的缓存设施。这些是通过 RequestContext,由IOC在您的服务中注入。
如果您使用的是默认的Funq IOC,它会按预期工作,当您挂钩AutoFac时,它不起作用,RequestContext为null,我不知道如何配置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为null。如果我删除autofac然后它按预期工作。使用Autofac RequestContext为空
答案 0 :(得分:1)
RequestOtext并不是由IOC注入的,如果您的服务通过实现IRequiresRequestContext
接口请求它,它是由ServiceStack设置的特殊属性。例如。
public class MyClass : IService, IRequiresRequestContext {
//injected by ServiceStack at run-time (per request)
public IRequestContext RequestContext { get; set; }
}
这与在ServiceStack中方便的默认Service基类中填充RequestContext属性的机制相同。