简体   繁体   English

带有ninject的Owin Web Api statup.cs

[英]Owin Web Api statup.cs with ninject

I have a problem to use web api Owin with ninject. 我在将Web api Owin与ninject结合使用时遇到问题。 When I try to use my web api , it was this error, and I can not fix this problem , I've tried many ways , none of which revolved my problem. 当我尝试使用Web api时,正是此错误,并且无法解决此问题,我尝试了很多方法,但都没有解决我的问题。

This error occurs when I boot my application 当我启动我的应用程序时出现此错误

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

My statup.cs 我的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);

My class DependencyResolver.cs 我的课程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);
    }
}

and my class NinjectWebCommon.cs 和我的课程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>();

    }        
}

Help me plis. 请帮我。

I know its very old Q but still comes up in google in top 3 search for this error. 我知道它的问号很旧,但仍然出现在Google的前3个搜索中,以解决此错误。 So as a solution just remove ninject.web.webapi and its dependencies like ninject.web.webapi.webhost. 因此,作为解决方案,只需删除ninject.web.webapi及其依赖项(如ninject.web.webapi.webhost)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM