Criei um novo projeto MVC3, apertei F5, vi a página de amostra.
Em seguida, usei o NuGet para obter a extensão Ninject.MVC . Modifiquei meu global.asax de acordo com a documentação do Ninject, Como configurar um aplicativo MVC3 :
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional });
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
Agora, quando executo o aplicativo, obtenho a tela amarela da morte com a seguinte exceção:
InvalidOperationException - a sequência não contém elementos.
em System.Linq.Enumerable.Single (...)
na linha Ninject.Web.Mvc.Bootstrapper.Initialize (...) 67.
E com certeza, a linha 67 desse arquivo chama .Single (), lançando assim a exceção.
O que estou fazendo de errado?
fonte
NinjectHttpApplication
) e configurando o kernel no~/App_Start/NinjectMVC3.cs
arquivo (RegisterServices
método).Eu tenho que adicionar a isso na esperança de que outra pessoa resolva o problema mais rapidamente e não queira arrancar cada fio de cabelo da cabeça como eu quase fiz.
Eu precisava renomear tudo em meu projeto para corresponder aos novos termos de negócios. Mudei os namespaces em todos os lugares e até mudei o nome do assembly (clique com o botão direito do mouse em projeto> propriedades> guia do aplicativo) para que o assembly gerado corresponda à nova convenção de nomenclatura. A mudança de nome da assembléia é o que deixou Ninject muito irritado!
Ao renomear o assembly gerado, um novo arquivo com o novo nome estava sendo criado quando compilamos. No entanto, o arquivo antigo com o nome antigo ainda estava no diretório bin! Se você tiver Ninject ativando por meio da classe adicionada em App_Start, então essa classe de ativação será chamada em AMBOS os assemblies (o antigo E o novo renomeado). Não me pergunte como ou por quê, mas ele pergunta e mostra o erro "já inicializado".
Nem mesmo a solução de limpeza funciona porque o Visual Studio apenas removerá os binários que está gerando, que seriam os novos renomeados. Isso deixa os mais velhos sozinhos, sentados ali.
Exclua sua pasta bin antes de tentar fazer qualquer outra coisa! Espero que isso evite que alguém desperdice valiosas horas de trabalho!
fonte
Eu atualizei a documentação Wiki vinculada em sua pergunta para mostrar as duas maneiras de configurar um aplicativo MVC3. Eu sugiro usar a segunda opção que é a forma preferida para o pacote NuGet.
Em vez de derivar de NinjectHttpApplication, ele está usando o NinjectMVC.cs na pasta AppStart, que é criada durante a instalação do pacote. Este também é o local onde você cria o kernel e onde carrega seus módulos ou onde define as ligações.
fonte
Como disse Alex Ford:
Eu tinha uma versão especial desse problema que poderia ser resolvido da seguinte maneira:
fonte
Minha solução foi definir a propriedade da pasta App_Start, Provedor de namespace como True.
Eu mudei isso para False para que o Resharper não realce o namespace que NÃO corresponde à estrutura da pasta.
fonte
Queria adicionar mais uma causa ...
Instalamos o pacote Ninject.MVC3 em vários projetos - apenas um dos quais era um aplicativo MVC real. No entanto, esquecemos de remover a pasta App_Start.
Remover a pasta App_Start do projeto referenciado resolveu o problema.
fonte
Para dar continuidade à resposta de @Chev ... esse foi meu problema final também. Se você estiver implantando em um site do Azure (agora denominado AppSite), você deseja clicar nesta caixa na publicação para remover arquivos antigos
fonte