Связывание веб-API ASP.NET с ninject

Я только что установил обновление mvc4 rc и безуспешно пытаюсь создать приложение API.

Я использую ninject, но не могу загрузить свои контроллеры. Я продолжаю получать сообщение об ошибке

Тип 'Api.Controllers.ConsumerController' не имеет конструктора по умолчанию

Я новичок в mvc и использую инъекцию, поэтому, пожалуйста, потерпите меня.

Я не делал ничего особенного для привязки по умолчанию, созданной с помощью nuget

 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)
    {
        kernel.Bind<IConsumerRepository>().To<ConsumerRepository>();
    }        
}

Мой контроллер выглядит так

   private readonly IConsumerRepository _repository;

    public ConsumerController(IConsumerRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public IQueryable<Consumer> Get(Guid id)
    {
        return _repository.Get(id).AsQueryable();
    }

Что мне нужно сделать, чтобы API-контроллеры работали с ninject?

Извините, если это просто.

Я попробовал ваше предложение, Майкл, однако после изменения webcommon.cs на это

  private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(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)
    {
        kernel.Bind<IConsumerRepository>().To<ConsumerRepository>();
    }

я получаю сообщение об ошибке, когда

var kernel = new StandardKernel();

вызывается

Метод «GetFilters» в типе « Ninject.Web.WebApi.Filter.DefaultFilterProvider из сборки «Ninject.Web.WebApi, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = c7192dc5380945e7» не имеет реализации.

Что я упустил?

36
задан tugberk 4 February 2013 в 20:35
поделиться