在OAuth GrantResourceOwnerCredentials方法中使用Simple Injector时出错



我在ASP中使用Simple Injector。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);

问题是,当我在GrantResourceOwnerCredentials中调用方法Injector.Container.GetInstance<IBusiness>()时,容器的作用域为null,因此,它会抛出特定的错误。所以有必要初始化作用域,我使用以下代码来完成:

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

并将容器类中的defaultScopeLifeestyle更改为hybrid:

public static Container Container
{
get
{
if (container == null)
{
container = new Container();
container.Options.DefaultScopedLifestyle = Lifestyle.CreateHybrid(
new AsyncScopedLifestyle(), new WebRequestLifestyle());
}
return container;
}
}

相关内容

最新更新