【问题标题】:Owin Web Api statup.cs with ninject带有ninject的Owin Web Api statup.cs
【发布时间】:2014-12-01 15:10:56
【问题描述】:

我在将 web api Owin 与 ninject 一起使用时遇到问题。当我尝试使用我的 web api 时,就是这个错误,我无法解决这个问题,我尝试了很多方法,没有一个解决我的问题。

当我启动我的应用程序时发生此错误

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>();

    }        
}

请帮帮我。

【问题讨论】:

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


【解决方案1】:

我知道它非常旧的 Q,但仍然出现在谷歌搜索该错误的前 3 名中。因此,作为一种解决方案,只需删除 ninject.web.webapi 及其依赖项,如 ninject.web.webapi.webhost。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-09-06
    • 2016-01-28
    • 2014-10-05
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多