0

我有一个非常基本的带有令牌身份验证的 WebAPI 设置。
在应用程序开始我做:

protected void Application_Start()
{
    DependencyConfig.RegisterDependecis();
    //...
    //...
}

哪个电话:

public class DependencyConfig
{
    private static ServiceContainer _LightInjectContainer;

    public static ServiceContainer LightInjectContainer
    {
        get { return _LightInjectContainer; }
    }

    public static void RegisterDependecis()
    {
        var container = new LightInject.ServiceContainer();
        container.RegisterApiControllers();
        container.ScopeManagerProvider = new PerLogicalCallContextScopeManagerProvider();
        container.EnableWebApi(GlobalConfiguration.Configuration);

        container.Register<IRegistrationManager, RegistrationManager>(new PerScopeLifetime());

        _LightInjectContainer = container;
    }
}

现在,当客户端调用令牌端点(请求令牌)时,我在这里定义的提供者:

OAuthOptions = new OAuthAuthorizationServerOptions
{
    //...
    //...
    Provider = new SimpleAuthorizationServerProvider()
    //...
    //...
};

正在与此方法一起使用:

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    //...

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        //...
        // Here I get the exception!
        var registrationManager = DependencyConfig.LightInjectContainer.GetInstance<IRegistrationManager>();
        //...
    }

    //...
}

当我尝试获取实例时,出现以下错误:

尝试创建一个没有当前作用域的作用域实例。

我知道 LightInject 对每个请求都有一个开始/结束范围的概念,它实际上告诉我没有开始范围。但我似乎无法弄清楚究竟是什么坏了,需要修复。

4

2 回答 2

1

通过阅读这个问题的最后一个答案我想出了这个解决方案:(手动启动范围)

using(DependencyConfig.LightInjectContainer.BeginScope())
{
    IRegistrationManager manager = DependencyConfig.LightInjectContainer.GetInstance<IRegistrationManager>();
}

从技术上讲它有效,但我不确定它是否是关于幕后发生的事情的正确解决方案。

于 2015-06-22T13:58:39.220 回答
0

我是 LightInject 的作者

你能在你的处理程序中试试这个吗(SimpleAuthorizationServerProvider)

request.GetDependencyScope().GetService(typeof(IRegistrationManager)) as IRegistrationManager;

实际上没有理由将容器公开为静态公共成员,因为这使得开始使用服务定位器反模式变得非常容易。

请查看此博客文章以获取更多信息。

http://www.strathweb.com/2012/11/asp-net-web-api-and-dependencies-in-request-scope/

于 2015-06-22T10:17:59.913 回答