Ошибка при прогоне примеров по внедрению зависимостей Ninject.

ASP.NET
  1. 2 года назад

    Здравствуйте.
    Начал изучать ASP.NET MVC, в чем данный ресурс очень помогает, за что хочу выразить глубокую благодарность создателю этого сайта.
    Некоторая проблема возникла при прогоне примеров по внедрению зависимостей Ninject. В файле NinjectDependencyResolver.cs

    using System;
    using System.Collections.Generic;
    using System.Web.Mvc;
    using EssentialTools.Models;
    using Ninject;
    using Ninject.Web.Common;
    
    namespace EssentialTools.Infrastructure
    {
        public class NinjectDependencyResolver : IDependencyResolver
        {
            private IKernel kernel;
    
            public NinjectDependencyResolver(IKernel kernelParam)
            {
                kernel = kernelParam;
                AddBindings();
            }
    
            public object GetService(Type serviceType)
            {
                return kernel.TryGet(serviceType);
            }
    
            public IEnumerable<object> GetServices(Type serviceType)
            {
                return kernel.GetAll(serviceType);
            }
    
            private void AddBindings()
            {
                kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
        }
    }

    в теле метода AddBindings в строке kernel.Bind<IValueCalculator>().To<LinqValueCalculator>(); возникает ошибка:

    CS0311 Тип "EssentialTools.Models.LinqValueCalculator" не может быть использован как параметр типа "TImplementation" в универсальном типе или методе "IBindingToSyntax<IValueCalculator>.To<TImplementation>()". Нет преобразования неявной ссылки из "EssentialTools.Models.LinqValueCalculator" в "EssentialTools.Models.IValueCalculator".

    (Кстати, в AddBindings не хватает завершающей фигурной скобки. В своем варианте я ее добавил, но здесь ничего трогать не стал и привел листинг полностью как в статье.)
    То есть, на сколько я понимаю, в данном случае VS не может увязать интерфейс с реализацией из-за несовпадения типов. Ломаю голову уже третий день, перепроверил все файлы проекта по несколько раз, но так и понял почему такая ситуация возникла. Правда в C# я пока еще в стадии освоения и возможно что то упустил, в смысле синтаксических особенностей.
    Буду очень признателен за любую помощь, очень уж хочется одолеть применение DI-контейнеров.

  2. Alexandr_Erohin

    Feb 5 Администратор
    Добавлено 2 года назад Alexandr_Erohin

    LinqValueCalculator реализует интерфейс IValueCalculator? Т.е. в определении класса есть след. код?

    public class LinqValueCalculator : IValueCalculator

или зарегистрируйтесь чтобы ответить