C#WebApi DI无法正常工作

时间:2015-12-02 07:36:33

标签: c# asp.net-web-api ninject

你好,我需要一些帮助。我在第二天挣扎,无法找到问题的根源。我正在使用令牌授权,身份和ninject处理web api。

这是我的核心:

[

这是我的api控制器:

 public IKernel CreateKernel()
    {
        var kernel = new StandardKernel();

        kernel.Bind<AppContext>().ToSelf().InRequestScope();
        kernel.Bind(x => { x.From(typeof(UserService).Assembly).SelectAllClasses().EndingWith("Service").BindDefaultInterface(); });

        kernel.Bind(typeof(IUserStore<AppIdentityUser>)).To(typeof(UserStore<AppIdentityUser>)).InRequestScope()
            .WithConstructorArgument("context", kernel.Get<AppContext>());


        kernel.Bind(typeof(UserManager<AppIdentityUser>)).To(typeof(UserManager<AppIdentityUser>)).InRequestScope()
            .WithConstructorArgument("store", kernel.Get<IUserStore<AppIdentityUser>>());

        kernel.Bind(typeof(IRoleStore<IdentityRole, string>)).To(typeof(RoleStore<IdentityRole>)).InRequestScope().WithConstructorArgument("context", kernel.Get<AppContext>());
        kernel.Bind(typeof(RoleManager<IdentityRole>)).To(typeof(RoleManager<IdentityRole>)).InRequestScope().WithConstructorArgument("store", kernel.Get<IRoleStore<IdentityRole, string>>());

        kernel.Bind<IOAuthAuthorizationServerProvider>().To<AuthorizationServerProvider>();
        kernel.Bind<IOAuthAuthorizationServerOptions>().To<MyOAuthAuthorizationServerOptions>();


        return kernel;
    }

这是我的服务:

         public UsersController(IUserService userService)
            {
                this._userService = userService;
            }
     public IHttpActionResult Login()
            {
//get user method 
    }

问题是这只能运作一次。当我打开应用程序并执行一个get动作时,它第二次工作,当我在几秒钟后尝试时,我得到用户存储中的Context被处置的异常。我怀疑我的ninject配置存在问题,但没有看到任何错误。

编辑:这是我的Owin Startup Class

     public UserService(UserManager<AppIdentityUser> userMenager, RoleManager<IdentityRole> roleManager)
        {
            this._userMenager = userMenager;
            this._roleManager = roleManager;
        }

   public AppIdentityUser GetUser(string name, string password)
        {
            return _userMenager.Find(name, password);  // here I recive error on second time
        }

0 个答案:

没有答案