2014-12-01 2 views
1

У меня проблема с использованием web api Owin с ninject. Когда я пытаюсь использовать свой веб-api, это была эта ошибка, и я не могу исправить эту проблему, я пробовал много способов, ни одна из которых не зависела от моей проблемы.Owin Web Api statup.cs с ninject

Эта ошибка возникает при загрузке моего приложения

Error activating ModelValidatorProvider using binding from ModelValidatorProvider to 

NinjectDefaultModelValidatorProvider 
A cyclical dependency was detected between the constructors of two services. 

Activation path: 
3) Injection of dependency ModelValidatorProvider into parameter defaultModelValidatorProviders of constructor of type DefaultModelValidatorProviders 
2) Injection of dependency DefaultModelValidatorProviders into parameter defaultModelValidatorProviders of constructor of type NinjectDefaultModelValidatorProvider 
1) Request for ModelValidatorProvider 

Suggestions: 
1) Ensure that you have not declared a dependency for ModelValidatorProvider on any implementations of the service. 
2) Consider combining the services into a single one to remove the cycle. 
3) Use property injection instead of constructor injection, and implement IInitializable 
    if you need initialization logic to be run after property values have been injected 

Мои statup.cs

var config = new HttpConfiguration(); 

OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
{ 
    AllowInsecureHttp = true, 
    TokenEndpointPath = new PathString("/api/token"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(365), 
    Provider = new SimpleAuthorizationServerProvider(), 
}; 

// Token Generation 
app.UseOAuthAuthorizationServer(OAuthServerOptions); 
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

WebApiConfig.Register(config); 
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 

config.DependencyResolver = new NinjectResolver(NinjectWebCommon.CreateKernel()); 


app.UseWebApi(config); 

Мой класс DependencyResolver.cs

public class NinjectDependencyScope : IDependencyScope, System.Web.Mvc.IDependencyResolver 
{ 
    private IResolutionRoot resolver; 

    internal NinjectDependencyScope(IResolutionRoot resolver) 
    { 
     Contract.Assert(resolver != null); 

     this.resolver = resolver; 
    } 

    public void Dispose() 
    { 
     resolver = null; 
    } 

    public object GetService(Type serviceType) 
    { 
     if (resolver == null) 
      throw new ObjectDisposedException("this", "This scope has already been disposed"); 

     return resolver.TryGet(serviceType); 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     if (resolver == null) 
      throw new ObjectDisposedException("this", "This scope has already been disposed"); 

     return resolver.GetAll(serviceType); 
    } 
} 

public class NinjectResolver : NinjectDependencyScope, System.Web.Mvc.IDependencyResolver, IDependencyResolver 
{ 
    private IKernel kernel; 

    public NinjectResolver(IKernel kernel) 
     : base(kernel) 
    { 
     this.kernel = kernel; 
    } 

    public IDependencyScope BeginScope() 
    { 
     return new NinjectDependencyScope(kernel); 
    } 
} 

и мой класс NinjectWebCommon.cs

public static class NinjectWebCommon 
{ 
    private static readonly Bootstrapper bootstrapper = new Bootstrapper(); 

    /// <summary> 
    /// Starts the application 
    /// </summary> 
    public static void Start() 
    { 
     DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
     DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
     bootstrapper.Initialize(CreateKernel); 
    } 

    /// <summary> 
    /// Stops the application. 
    /// </summary> 
    public static void Stop() 
    { 
     bootstrapper.ShutDown(); 
    } 

    /// <summary> 
    /// Creates the kernel that will manage your application. 
    /// </summary> 
    /// <returns>The created kernel.</returns> 
    public static IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     try 
     { 
      kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
      kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 
      RegisterServices(kernel); 

      return kernel; 
     } 
     catch 
     { 
      kernel.Dispose(); 
      throw; 
     } 
    } 

    /// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 
     //Injeções de Depêndencias 

     //Inject AppService 
     kernel.Bind(typeof (IAppServiceBase<>)).To(typeof (AppServiceBase<>)); 
     kernel.Bind<ICanalDistribuicaoAppService>().To<CanalDistribuicaoAppService>(); 
     kernel.Bind<ICaracteristicasAppService>().To<CaracteristicasAppService>(); 
     kernel.Bind<ICaracteristicasValorAppService>().To<CaracteristicasValorAppService>(); 
     kernel.Bind<ICentroAppService>().To<CentroAppService>(); 
     kernel.Bind<IClassificacaoContabilAppService>().To<ClassificacaoContabilAppService>(); 
     kernel.Bind<IClienteAppService>().To<ClienteAppService>(); 
     kernel.Bind<IClienteModalidadeCentroAppService>().To<ClienteModalidadeCentroAppService>(); 
     kernel.Bind<IClienteTipoCarregamentoCentroAppService>().To<ClienteTipoCarregamentoCentroAppService>(); 
     kernel.Bind<IClienteEmailAppService>().To<ClienteEmailAppService>(); 
     kernel.Bind<IClienteGrupoAppService>().To<ClienteGrupoAppService>(); 
     kernel.Bind<IClienteStatusAppService>().To<ClienteStatusAppService>(); 
     kernel.Bind<ICondicaoPagamentoAppService>().To<CondicaoPagamentoAppService>(); 
     kernel.Bind<IDimensoesAppService>().To<DimensoesAppService>(); 
     kernel.Bind<IEmbalagemAppService>().To<EmbalagemAppService>(); 
     kernel.Bind<IEscritorioVendasAppService>().To<EscritorioVendasAppService>(); 
     kernel.Bind<IEstoqueAppService>().To<EstoqueAppService>(); 
     kernel.Bind<IGrupoProdutoRestritoAppService>().To<GrupoProdutoRestritoAppService>(); 
     kernel.Bind<ILiberacaoCIFAppService>().To<LiberacaoCIFAppService>(); 
     kernel.Bind<ILocalRetiradaAppService>().To<LocalRetiradaAppService>(); 
     kernel.Bind<IMateriaisAppService>().To<MateriaisAppService>(); 
     kernel.Bind<IModalidadeAppService>().To<ModalidadeAppService>(); 
     kernel.Bind<IOrganizacaoVendasAppService>().To<OrganizacaoVendasAppService>(); 
     kernel.Bind<IPedidoFavoritoAppService>().To<PedidoFavoritoAppService>(); 
     kernel.Bind<IProdutoAppService>().To<ProdutoAppService>(); 
     kernel.Bind<IRamoEmpresaAppService>().To<RamoEmpresaAppService>(); 
     kernel.Bind<ISegmentoMercadoAppService>().To<SegmentoMercadoAppService>(); 
     kernel.Bind<ISetorAtividadeAppService>().To<SetorAtividadeAppService>(); 
     kernel.Bind<IStatusReservaAppService>().To<StatusReservaAppService>(); 
     kernel.Bind<ISubstituicaoFiscalAppService>().To<SubstituicaoFiscalAppService>(); 
     kernel.Bind<ITipoCarregamentoAppService>().To<TipoCarregamentoAppService>(); 
     kernel.Bind<ITipoEmailAppService>().To<TipoEmailAppService>(); 
     kernel.Bind<IUtilizacaoAppService>().To<UtilizacaoAppService>(); 
     kernel.Bind<IUsuarioAppService>().To<UsuarioAppService>(); 

     //Inject Services 
     kernel.Bind(typeof (IServiceBase<>)).To(typeof (ServiceBase<>)); 
     kernel.Bind<ICanalDistribuicaoService>().To<CanalDistribuicaoService>(); 
     kernel.Bind<ICaracteristicasService>().To<CaracteristicasService>(); 
     kernel.Bind<ICaracteristicasValorService>().To<CaracteristicasValorService>(); 
     kernel.Bind<ICentroService>().To<CentroService>(); 
     kernel.Bind<IClassificacaoContabilService>().To<ClassificacaoContabilService>(); 
     kernel.Bind<IClienteService>().To<ClienteService>(); 
     kernel.Bind<IClienteModalidadeCentroService>().To<ClienteModalidadeCentroService>(); 
     kernel.Bind<IClienteTipoCarregamentoCentroService>().To<ClienteTipoCarregamentoCentroService>(); 
     kernel.Bind<IClienteEmailService>().To<ClienteEmailService>(); 
     kernel.Bind<IClienteGrupoService>().To<ClienteGrupoService>(); 
     kernel.Bind<IClienteStatusService>().To<ClienteStatusService>(); 
     kernel.Bind<ICondicaoPagamentoService>().To<CondicaoPagamentoService>(); 
     kernel.Bind<IDimensoesService>().To<DimensoesService>(); 
     kernel.Bind<IEmbalagemService>().To<EmbalagemService>(); 
     kernel.Bind<IEscritorioVendasService>().To<EscritorioVendasService>(); 
     kernel.Bind<IEstoqueService>().To<EstoqueService>(); 
     kernel.Bind<IGrupoProdutoRestritoService>().To<GrupoProdutoRestritoService>(); 
     kernel.Bind<ILiberacaoCIFService>().To<LiberacaoCIFService>(); 
     kernel.Bind<ILocalRetiradaService>().To<LocalRetiradaService>(); 
     kernel.Bind<IMateriaisService>().To<MateriaisService>(); 
     kernel.Bind<IModalidadeService>().To<ModalidadeService>(); 
     kernel.Bind<IOrganizacaoVendasService>().To<OrganizacaoVendasService>(); 
     kernel.Bind<IPedidoFavoritoService>().To<PedidoFavoritoService>(); 
     kernel.Bind<IProdutoService>().To<ProdutoService>(); 
     kernel.Bind<IRamoEmpresaService>().To<RamoEmpresaService>(); 
     kernel.Bind<ISegmentoMercadoService>().To<SegmentoMercadoService>(); 
     kernel.Bind<ISetorAtividadeService>().To<SetorAtividadeService>(); 
     kernel.Bind<IStatusReservaService>().To<StatusReservaService>(); 
     kernel.Bind<ISubstituicaoFiscalService>().To<SubstituicaoFiscalService>(); 
     kernel.Bind<ITipoCarregamentoService>().To<TipoCarregamentoService>(); 
     kernel.Bind<ITipoEmailService>().To<TipoEmailService>(); 
     kernel.Bind<IUtilizacaoService>().To<UtilizacaoService>(); 
     kernel.Bind<IUsuarioService>().To<UsuarioService>(); 

     //Inject Repositories 
     kernel.Bind(typeof (IRepositoryBase<>)).To(typeof (RepositoryBase<>)); 
     kernel.Bind<ICanalDistribuicaoRepository>().To<CanalDistribuicaoRepository>(); 
     kernel.Bind<ICaracteristicasRepository>().To<CaracteristicasRepository>(); 
     kernel.Bind<ICaracteristicasValorRepository>().To<CaracteristicasValorRepository>(); 
     kernel.Bind<ICentroRepository>().To<CentroRepository>(); 
     kernel.Bind<IClassificacaoContabilRepository>().To<ClassificacaoContabilRepository>(); 
     kernel.Bind<IClienteRepository>().To<ClienteRepository>(); 
     kernel.Bind<IClienteModalidadeCentroRepository>().To<ClienteModalidadeCentroRepository>(); 
     kernel.Bind<IClienteTipoCarregamentoCentroRepository>().To<ClienteTipoCarregamentoCentroRepository>(); 
     kernel.Bind<IClienteEmailRepository>().To<ClienteEmailRepository>(); 
     kernel.Bind<IClienteGrupoRepository>().To<ClienteGrupoRepository>(); 
     kernel.Bind<IClienteStatusRepository>().To<ClienteStatusRepository>(); 
     kernel.Bind<ICondicaoPagamentoRepository>().To<CondicaoPagamentoRepository>(); 
     kernel.Bind<IDimensoesRepository>().To<DimensoesRepository>(); 
     kernel.Bind<IEmbalagemRepository>().To<EmbalagemRepository>(); 
     kernel.Bind<IEscritorioVendasRepository>().To<EscritorioVendasRepository>(); 
     kernel.Bind<IEstoqueRepository>().To<EstoqueRepository>(); 
     kernel.Bind<IGrupoProdutoRestritoRepository>().To<GrupoProdutoRestritoRepository>(); 
     kernel.Bind<ILiberacaoCIFRepository>().To<LiberacaoCIFRepository>(); 
     kernel.Bind<ILocalRetiradaRepository>().To<LocalRetiradaRepository>(); 
     kernel.Bind<IMateriaisRepository>().To<MateriaisRepository>(); 
     kernel.Bind<IModalidadeRepository>().To<ModalidadeRepository>(); 
     kernel.Bind<IOrganizacaoVendasRepository>().To<OrganizacaoVendasRepository>(); 
     kernel.Bind<IPedidoFavoritoRepository>().To<PedidoFavoritoRepository>(); 
     kernel.Bind<IProdutoRepository>().To<ProdutoRepository>(); 
     kernel.Bind<IRamoEmpresaRepository>().To<RamoEmpresaRepository>(); 
     kernel.Bind<ISegmentoMercadoRepository>().To<SegmentoMercadoRepository>(); 
     kernel.Bind<ISetorAtividadeRepository>().To<SetorAtividadeRepository>(); 
     kernel.Bind<IStatusReservaRepository>().To<StatusReservaRepository>(); 
     kernel.Bind<ISubstituicaoFiscalRepository>().To<SubstituicaoFiscalRepository>(); 
     kernel.Bind<ITipoCarregamentoRepository>().To<TipoCarregamentoRepository>(); 
     kernel.Bind<ITipoEmailRepository>().To<TipoEmailRepository>(); 
     kernel.Bind<IUtilizacaoRepository>().To<UtilizacaoRepository>(); 
     kernel.Bind<IUsuarioRepository>().To<UsuarioRepository>(); 

    }   
} 

Помощь мне Плис.

+0

Аналогичный вопрос [здесь] (http://stackoverflow.com/questions/26312231/ninjectdependencyresolver-fails-binding-modelvalidatorprovider), ответа пока нет. –

+0

Какую версию вы используете? Могли бы вы убедиться, что у вас есть последняя версия? [Cyclic Exendence Exception] (https://github.com/ninject/ninject/issues/131) – Win

ответ

0

Я знаю его очень старый Q, но по-прежнему появляется в google в верхней части 3 для поиска этой ошибки. Так как решение просто удаляет ninject.web.webapi и его зависимости, такие как ninject.web.webapi.webhost.

Смежные вопросы