Je fais un Empty Web API in Visual Studio 2013
Cadre 4.5. Évidemment NinjectWebCommon.cs
n'apparait pas.
J'ai installé via Nuget,
Ninject.Web.WebApi,
Ninject.web.WebApi.WebHost
mais NinjectWebCommon.cs
n'apparaît toujours pas.
De quoi d'autre ai-je besoin pour installer?
Puis-je ajouter ce fichier manuellement?
merci
Il semble que le package NuGet Ninject.Web.Common.WebHost 3.3.0 le plus récent n'inclut plus le NinjectWebCommon.cs. Les versions plus anciennes, telles que 3.2.0 incluent ce fichier.
Ninject.Web.Common.WebHost 3.3.0 fournit une classe NinjectHttpApplication dont vous pouvez dériver et utiliser à la place de NinjectWebCommon.cs. La documentation wiki pour Ninject ne semble pas avoir été mise à jour mais il semble que l'utilisation de NinjectHttpApplication soit une approche documentée, comme indiqué ci-dessous:
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();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private void RegisterServices(IKernel kernel)
{
// e.g. kernel.Load(Assembly.GetExecutingAssembly());
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
Testé avec le dernier Ninject: créer une application Web vide et cocher les cases pour Mvc et Web Api
Installer le package Nuget: Ninject.Web.WebApi.WebHost
Installer le package Nuget: WebActivatorEx
Créez une classe dans App_Start nommée NinjectWebCommon.cs
[Assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
[Assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(NinjectWebCommon), "Stop")]
namespace <YOURNAMESPACE>
{
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
//kernel.Bind<IRepo>().ToMethod(ctx => new Repo("Ninject Rocks!"));
}
}
}
Configurez votre DI dans RegisterServices
Ajouter une dépendance aux paramètres du constructeur des contrôleurs Mvc ou Web Api
J'espère que ça aide, merci.