gpt4 book ai didi

c# - 将 ASP.Net MVC 4 Web API 与 Ninject.Web.WebApi 结合使用时出现问题

转载 作者:IT王子 更新时间:2023-10-29 04:17:52 26 4
gpt4 key购买 nike

我正在尝试将新的 ASP.Net MVC 4 Web API 项目模板与 Ninject 一起使用,但由于出现以下错误而碰壁:

Method 'GetFilters' in type 'Ninject.Web.WebApi.Filter.DefaultFilterProvider' from assembly 'Ninject.Web.WebApi, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7' does not have an implementation.

我正在使用 ASP.Net MVC 4 -> Web API 模板在 Visual Studio 2010 中创建一个全新的项目,并且我正在使用最新的 Ninject NuGet 包:

  • 注入(inject) 3.0.1.10
  • Ninject.Web.Common 3.0.0.7
  • Ninject.Web.WebApi 3.0.0.2

我尝试了 this question 中提供的解决方案但是我没有任何运气 - 如果我删除对 Ninject.Web.WebApi 的引用,那么 MVC 永远不会使用 Ninject。我还注意到他们提到了 Ninject.MVC3 但是我使用的是新的 Ninject.WebApi 插件。

我正在使用在 NuGet 安装期间创建的 NinjectWebCommon.cs 中的默认绑定(bind)代码,并尝试在 RegisterServices()

中注册一项简单服务
[assembly: WebActivator.PreApplicationStartMethod(typeof(mkts.web.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(mkts.web.App_Start.NinjectWebCommon), "Stop")]

namespace mkts.web.App_Start
{
using System;
using System.Web;

using Microsoft.Web.Infrastructure.DynamicModuleHelper;

using Ninject;
using Ninject.Web.Common;
using mkts.service;

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>
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;
}

/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
//Test binding
kernel.Bind<IStudentService>().To<StudentService>();
}
}
}

我的 Controller :

namespace mkts.web.Controllers
{
public class HomeController : Controller
{
private readonly IStudentService studentService;

public HomeController(IStudentService studentService)
{
this.studentService = studentService;
}


public ActionResult Index()
{
return View();
}
}
}

非常感谢您对此提供的任何帮助。

最佳答案

Ninject.WebApi 是针对 Beta 编写的,现在已弃用。

删除它,安装 Ninject.MVC3。

现在您需要一个自制的 IDependencyResolver 和 IDependencyScope。我在这里发布了一个演练 - http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/

关于c# - 将 ASP.Net MVC 4 Web API 与 Ninject.Web.WebApi 结合使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com