Ninject.Web.Common lançando ActivationException tentando injetar dependências em HttpApplicationInitializationHttpModule

StackOverflow https://stackoverflow.com//questions/9693957

Pergunta

Não sei por onde começar a resolver isso, mas estou recebendo uma exceção ao tentar executar meu aplicativo ASP.NET MVC.

Aqui está o erro que estou recebendo:

[Exceção de ativação:Erro ao ativar IntPtr

Nenhuma ligação correspondente está disponível e o tipo não é autovinculável.Caminho de ativação:

  1. Injeção da dependência IntPtr no método de parâmetro do construtor do tipo Func{IKernel}
  2. Injeção da dependência Func{IKernel} no parâmetro lazyKernel do construtor do tipo HttpApplicationInitializationHttpModule
  3. Solicitação de IHttpModule

Sugestões:

  1. Certifique-se de ter definido uma ligação para IntPtr.
  2. Se a ligação foi definida em um módulo, certifique-se de que o módulo tenha sido carregado no kernel.
  3. Certifique-se de não ter criado acidentalmente mais de um kernel.
  4. Se você estiver usando argumentos do construtor, certifique-se de que o nome do parâmetro corresponda ao nome do parâmetro do construtor.
  5. Se você estiver usando o carregamento automático de módulos, certifique-se de que o caminho de pesquisa e os filtros estejam corretos.

O rastreamento de pilha é o seguinte:

   at Ninject.KernelBase.Resolve(IRequest request) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 359
   at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 165
   at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 114
   at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157
   at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 165
   at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 114
   at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157
   at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386
   at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
   at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Ninject.Web.Common.NinjectHttpModule.Init(HttpApplication context) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpModule.cs:line 41
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Isso não parece ser um erro que todo mundo está recebendo (pelo menos, minhas pesquisas no Google não revelaram nada de útil), então presumo que estou fazendo algo estranho, mas não tenho ideia de por onde começar a depurar isso.

Devo mencionar que estou usando várias bibliotecas Ninject (Ninject, Ninject.Web.Common, Ninject.MVC3 e Ninject.FluentValidation), todas da versão 3.0.00-RC3.Sei que todas as apostas serão canceladas se eu usar bibliotecas de pré-lançamento, mas tenho a sensação de que estou fazendo algo errado porque outros não parecem estar recebendo o mesmo erro.

Alguma ideia sobre qual poderia ser o problema ou onde devo começar a procurar?

Foi útil?

Solução 2

Decidi excluir meu arquivo App_Start injectWebCommon.cs (que foi criado quando instalei o Ninject.MVC 3.0.0-rc2) e reinstalar o pacote Nuget (rc3).O arquivo NinjectWebCommon.cs recém-criado era um pouco diferente.Problema resolvido!

Outras dicas

Você pode corrigir isso adicionando estas duas ligações ao kernel:

kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

Enfrentei o mesmo problema com um projeto WebApi, depurando notei que o CreateKernel em App_Start/NinjectWebCommon.cs foi chamado duas vezes, e na segunda vez que travou, corrigi a remoção de 2 linhas no topo desse arquivo

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(RetailStore.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(RetailStore.App_Start.NinjectWebCommon), "Stop")]

E então o método foi chamado uma vez e o bug desapareceu.

Recebi exatamente a mesma mensagem de erro, embora o código não tenha mudado desde a noite anterior.Eu estava trabalhando no código de exemplo de http://www.asp.net/web-api/videos/getting-started/authorization

Perdi bem mais de uma hora por causa de algo bobo.Eu havia decorado meu controlador para [Autorizar], mas no dia seguinte, quando comecei a trabalhar e estava testando a API, minha sessão não era mais válida, então presumi que havia algo sutil no código que havia mudado.

Espero que isso ajude alguém que é tão novo no Ninject quanto eu...

O que apareceu no meu navegador foi:
XML Parsing Error: no element found
Location: server-name/api/Cities/
Line Number 1, Column 1:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top