NinjectDependencyResolver fails binding ModelValidatorProvider

前端 未结 10 1564
迷失自我
迷失自我 2020-12-08 14:00

I\'m developing an ASP.NET Web Api 2.2 with C#, .NET Framework 4.5.1.

After updating my Web.Api to Ninject 3.2.0 I get this error:

Error activating M         


        
10条回答
  •  孤城傲影
    2020-12-08 14:51

    In my case it was working just fine in Owin Selfhost context, but not when hosted in IIS. My solution was to remove all Ninject related assemblies from nuget packages except Ninject itself.

    Then I wrote my own DependencyResolver class, feel free to leave improvements in the comments.

    public class NinjectDepsolver : IDependencyResolver
    {
        private IKernel _kernel;
    
        public NinjectDepsolver(IKernel kernel)
        {
            _kernel = kernel;
        }
    
        public void Dispose()
        {
            _kernel = null;
        }
    
        public object GetService(Type serviceType) => _kernel.TryGet(serviceType);
    
        public IEnumerable GetServices(Type serviceType) => _kernel.GetAll(serviceType).ToArray();
    
        public IDependencyScope BeginScope() => new DepScope(this);
    
        class DepScope : IDependencyScope
        {
            private NinjectDepsolver _depsolver;
    
            public DepScope(NinjectDepsolver depsolver)
            {
                _depsolver = depsolver;
            }
    
            public void Dispose()
            {
                _depsolver = null;
            }
    
            public object GetService(Type serviceType) => _depsolver.GetService(serviceType);
    
            public IEnumerable GetServices(Type serviceType) => _depsolver.GetServices(serviceType);
        }
    }
    
    
    

    And then in your Owin Configuration method:

    var kernel = new StandardKernel();
    kernel.Load();
    var httpConfig = new HttpConfiguration();
    var httpConfig.DependencyResolver = new NinjectDepsolver(kernel);
    var httpConfig.MapHttpAttributeRoutes();
    
    app.UseWebApi(httpConfig);
    

    提交回复
    热议问题