ServiceStack AuthFeature空引用异常

时间:2016-02-15 10:42:14

标签: c# .net servicestack httpserver

我有一个简单的servicestack自托管应用程序,除了其他所有尝试使用身份验证之外。在AppHost构造函数中,我打电话

                Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                new IAuthProvider[]
                {
                    new RoomsAuthProvider(),
                }));

但在调用期间我总是得到空引用异常。我尝试分离调用 - 在一个字符串中创建auth功能,在另一个字符串中添加 - AuthFeature创建失败。我也试过打电话

                Container.Register(new MemoryCacheClient());

这没有任何改变。欢迎提出任何想法。附上Stacktrace

ServiceStack.AuthFeature.<.ctor>b__a(String s)
ServiceStack.AuthFeature..ctor(Func`1 sessionFactory, IAuthProvider[] authProviders, String htmlRedirect)
CoreServer.Program.AppHost..ctor() в C:\Users\Sorrow\documents\visual studio 2015\Projects\RoomsServicestack\CoreServer\Program.cs
CoreServer.Program.Main(String[] args) в C:\Users\Sorrow\documents\visual studio 2015\Projects\RoomsServicestack\CoreServer\Program
System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
System.Threading.ThreadHelper.ThreadStart()

1 个答案:

答案 0 :(得分:2)

  

在AppHost构造函数中,我打电话

不要在AppHost构造函数中注册任何插件,所有配置都应该在AppHost.Configure()内进行,例如:

public override void Configure(Container container)
{
    Plugins.Add(new AuthFeature(() => new AuthUserSession(),
        new IAuthProvider[] {
            new RoomsAuthProvider(),
        }));
}

这与您的问题无关,但如果您想注册Caching Provider,则需要在ICacheClient界面注册,例如:

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

这将允许您通过ICacheClient界面解决依赖关系:

var cache = Container.Resolve<ICacheClient>();

这是必需的,因为任何使用缓存的内置服务都会解析已注册的ICacheClient依赖项。