1

ServiceStackのキャッシュ機能を使おうとしています。これらは、サービスのIOCによって挿入されるRequestContextを介してアクセスされます。

これは、デフォルトの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はnullです

4

1 に答える 1

1

RequestContextは、IOCによって挿入されることを意図したものではなく、サービスがIRequiresRequestContextインターフェイスを実装することによって要求した場合にServiceStackによって設定される特別なプロパティです。例えば

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

これは、RequestContextプロパティがServiceStackの便利なデフォルトのService基本クラスに入力されるのと同じメカニズムです。

于 2013-01-24T07:39:50.337 に答える