具有Autofac的Servicestack无法解析IRequestContext

时间:2013-01-24 04:56:49

标签: servicestack autofac ormlite-servicestack

我正在尝试使用服务堆栈的缓存设施。这些是通过 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为空

1 个答案:

答案 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属性的机制相同。