Инъекция зависимостей Ninject в dotnet web api 2 - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь внедрить внедрение зависимостей в web api 2, но не могу этого сделать. Ошибка получения ссылки на объект. Вот мой инструмент

Модель:

public class Product
{
    .....
}

Интерфейс:

 public interface IProductRepository
{
    IEnumerable<Product> GetAll();
    .....
}

Реализация интерфейса:

public class ProductRespository : IProductRepository, IDisposable
{
    private ApiContext _context;

    public ProductRespository(ApiContext context)
    {
        this._context = context;
    } 
    public ProductRespository()
    {

    } 
    public IEnumerable<Product> GetAll()
    {
        return _context.Products.OrderBy(o => o.Name);
    }
   ......
}

И Ninjectwebcommon.cs класс:

 public static class NinjectWebCommon
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    public static void Start(){....}
    .....
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
        System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new Ninject.WebApi.DependencyResolver.NinjectDependencyResolver(kernel);

        RegisterServices(kernel);
        return kernel;
    }
    private static void RegisterServices(IKernel kernel)
    {
        //kernel.Bind<IRepo>().ToMethod(ctx => new Repo("Ninject Rocks!"));
        kernel.Bind<ApiContext>().ToSelf().InRequestScope();
        kernel.Bind<IProductRepository>().To<ProductRespository>().InRequestScope();
    }
}

И, наконец, в моем контроллере ProductController:

public class ProductController : ApiController
{
    private IProductRepository _productRepository = null;
    public ProductController(IProductRepository productRepository)
    {
        _productRepository = productRepository;
    }

    public ProductController()
    {

    }

    public IHttpActionResult GetAllProducts()
    {
        return Ok(_productRepository.GetAll());
    }
}

Когда включается метод контроллера getallproducts, я получаю это исключение

System.NullReferenceException: 'Ссылка на объект не установлена ​​для экземпляра объекта.'

1 Ответ

0 голосов
/ 09 мая 2018

Я думаю, это связано с вашим интерфейсом в ProductController. Попробуйте вот так:

public IProductRepository _productRepository { get; set; }

У меня были такие же проблемы, но использование данной строки помогло мне / нам.

...