代码之家  ›  专栏  ›  技术社区  ›  William

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

  •  0
  • William  · 技术社区  · 6 年前

    我在我的ASP.NET WEb API项目中使用Simple Injector进行依赖项注入,并使用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 回复  |  直到 6 年前
        1
  •  1
  •   William    6 年前

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

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

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