Здравствуйте.
Начал изучать 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-контейнеров.