2017-10-29 56 views
7

Tôi đang làm Khung Empty Web API in Visual Studio 2013 4.5. Rõ ràng NinjectWebCommon.cs không xuất hiện.Web API2 NinjectWebCommon.cs không xuất hiện

Tôi đã cài đặt qua NuGet,

  • Ninject,
  • Ninject.Web.Common,
  • Ninject.MVC5,
  • Ninject.Web.Common.WebHost,
  • Ninject. Web.WebApi,

  • Ninject.web.WebApi.WebHost

    nhưng NinjectWebCommon.cs vẫn không xuất hiện.

Tôi cần cài đặt gì khác?

Tôi có thể thêm tệp đó theo cách thủ công không?

nhờ

Trả lời

15

Dường như Ninject.Web.Common.WebHost 3.3.0 NuGet gói gần đây nhất không còn chứa NinjectWebCommon.cs. Các phiên bản cũ hơn, chẳng hạn như 3.2.0 bao gồm tệp này.

Ninject.Web.Common.WebHost 3.3.0 cung cấp lớp NinjectHttpApplication bạn có thể lấy được và sử dụng thay cho NinjectWebCommon.cs. Các wiki documentation for Ninject dường như không đã được cập nhật nhưng có vẻ như sử dụng NinjectHttpApplication là một cách tiếp cận văn bản, như hình dưới đây:

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); 
    } 
} 
+0

Tôi không thể tìm ra cách * giải quyết * phụ thuộc. – Alisson

1

Thử nghiệm với mới nhất Ninject: Tạo một ứng dụng Web rỗng và chọn hộp kiểm cho MVC và Web Api

Install NuGet Package: Ninject.Web.WebApi.WebHost

Install NuGet Package: WebActivatorEx

Tạo một lớp trong App_Start tên 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!")); 
     } 
    } 
} 

Cấu hình DI bạn trong RegisterServices

Thêm phụ thuộc vào MVC hoặc Web Api thông số điều khiển constructor

Hy vọng nó giúp, cảm ơn.

+3

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm [phần thiết yếu của câu trả lời] (https://meta.stackexchange.com/a/8259) tại đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. [Câu trả lời có nhiều hơn một liên kết có thể bị xóa] (https://stackoverflow.com/help/deleted-answers) (Ngoài ra, nếu điều này github của bạn, bạn có thể muốn [tiết lộ liên kết của bạn] (https: // stackoverflow .com/help/promotion) trong câu trả lời của bạn) – adiga

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi.- [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18113030) – waka

Các vấn đề liên quan