在OAuth GrantResourceOwnerCredentials方法内使用简单注入器时出错

时间:2018-10-29 18:39:22

标签: asp.net dependency-injection asp.net-web-api2 simple-injector

我在ASP.NET WEb API项目中使用简单注入器进行依赖注入和OAuth进行身份验证。为此,我需要解析GrantResourceOwnerCredentials方法内部的接口,如下所示:

using (IBusiness business = Injector.Container.GetInstance<IBusiness>())
{
}

但是当它过去时,它向我显示此错误:

该企业已注册为“异步作用域”生活方式,但在活动(异步作用域)作用域范围之外请求实例。

我正在使用此单例方法配置容器:

public class Injector
{
    private static Container container;

    public static Container Container
    {
        get
        {
            if (container == null)
            {
                container = new Container();
                container.Options.DefaultLifestyle = Lifestyle.Scoped;
                container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
            }

            return container;
        }
    }

    public static TInstance GetInstance<TInstance>() where TInstance : class
    {
        return Container.GetInstance<TInstance>();

    }
}

我正在使用以下代码注册依赖项:

Injector.Container.Register<IBusiness, Business>(Lifestyle.Scoped);

1 个答案:

答案 0 :(得分:0)

问题是当我在Injector.Container.GetInstance<IBusiness>()内调用方法GrantResourceOwnerCredentials时,容器的作用域为空,因此,它引发了该特定错误。因此有必要初始化作用域,我使用以下代码完成了此操作:

 using (SimpleInjector.Lifestyles.AsyncScopedLifestyle.BeginScope(Injector.Container))
 {
     using (IBusiness business = Injector.Container.GetInstance<IBusiness>())
     {
     }
 }

并在容器类中将defaultScopeLifestyle更改为hybrid:

public static Container Container
        {
            get
            {
                if (container == null)
                {
                    container = new Container();

                    container.Options.DefaultScopedLifestyle = Lifestyle.CreateHybrid(
                        new AsyncScopedLifestyle(), new WebRequestLifestyle());
                }

                return container;
            }
        }