我在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);
答案 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;
}
}