Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决错误:该类型似乎未实现microsoft.practices.servicelocation.iservicelocator?_C#_Asp.net_Asp.net Mvc 4_Ninject_Ninject.web.mvc - Fatal编程技术网

C# 如何解决错误:该类型似乎未实现microsoft.practices.servicelocation.iservicelocator?

C# 如何解决错误:该类型似乎未实现microsoft.practices.servicelocation.iservicelocator?,c#,asp.net,asp.net-mvc-4,ninject,ninject.web.mvc,C#,Asp.net,Asp.net Mvc 4,Ninject,Ninject.web.mvc,我是MVC的新手,我正在跟随Adam Freeman的“PRO ASP.NET MVC 4”。我目前正在写第六章。在这篇文章中,我正在学习如何使用MVC4中的Ninject进行依赖注入。我已经创建了书中描述的应用程序。现在我不明白为什么会出现以下错误: 该类型似乎未实现microsoft.practices.servicelocation.iservicelocator 这是我的控制器代码: public class HomeController : Controller { priva

我是MVC的新手,我正在跟随Adam Freeman的“PRO ASP.NET MVC 4”。我目前正在写第六章。在这篇文章中,我正在学习如何使用MVC4中的Ninject进行依赖注入。我已经创建了书中描述的应用程序。现在我不明白为什么会出现以下错误:

该类型似乎未实现microsoft.practices.servicelocation.iservicelocator

这是我的控制器代码:

public class HomeController : Controller
{
    private Product[] products = {
        new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
        new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
        new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
        new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
    };
    private IValueCalculator calc;
    public HomeController(IValueCalculator calcParam)
    {
        calc = calcParam;
    }
    public ActionResult Index()
    {
        ShoppingCart cart = new ShoppingCart(calc) { Products = products };
        decimal totalvalue = cart.CalculateProductTotal();
        return View(totalvalue);
    }
}
我创建了一个名为“NinjectDependencyResolver”的类,如下所示:

public class NinjectDependencyResolver : DependencyResolver
{
    private IKernel kernal;

    public NinjectDependencyResolver()
    {
        kernal = new StandardKernel();
        AddBindings();
    }


    public object GetService(Type serviceType)
    {
        return kernal.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernal.GetAll(serviceType);
    }

    private void AddBindings()
    {
        kernal.Bind<IValueCalculator>().To<LinqValueCalculator>();
    }
}
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        DependencyResolver.SetResolver( new NinjectDependencyResolver());
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}
在“DependencyResolver.SetResolver(new NinjectDependencyResolver());”的这一行中,我得到了错误:

he type EssentialTools.Infrastructure.NinjectDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.
参数名称:commonServiceLocator

请帮助我,我如何解决此错误


提前感谢。

问题是您的
NinjectDependencyResolver
没有实现
IDependencyResolver
接口,而是继承自
DependencyResolver
类。
DependencyResolver
没有实现
IDependencyResolver
,这会导致您自己的方法与MVC知道的任何内容无关

只需更改为:

public class NinjectDependencyResolver : IDependencyResolver

但正如Ufuk Hacıoğulları所说,您可以使用官方的Ninject.MVC3 NuGet包将Ninject与MVC集成。这个包是由Ninject的开发人员创建的,它依赖于Ninject核心库。

我在同一点上犯了类似的错误。我实现了
idependencysolver
,得到了相同的错误。这是由错误的“使用”语句引起的-在
System.Web.Http
中有一个类似的
idependencysolver
。检查您是否正在使用
System.Web.Mvc

一年后,我遇到了同样的问题。。。多亏了pdb的回答,我可以找到一份工作。 在定制的
NinjectDependencyResolver
中强制执行
System.Web.Mvc.IDependencyResolver
而不是
System.Web.dependency.IDependencyResolver
会在代码的其他部分需要
System.Web.Http.Dependencies.IDependencyResolver
的情况下导致强制转换问题。例如,当您尝试概括定制DI时:

GlobalConfiguration.Configuration.DependencyResolver =
    new NinjectDependencyResolver(kernel)
在我的例子中,我同时实现了
idependencysolver
,其工作原理如下:

public class NinjectDependencyResolver
    : NinjectDependencyScope
    , IDependencyResolver
    , System.Web.Mvc.IDependencyResolver

这个问题可以通过在
StructureMappDependencyResolver
类上实现
IDependencyResolver
接口来解决。

您还可以使用更易于集成的Ninject.MVC3包。它支持MVC 4。@UfukHacıoğulları为什么?“Ninject Ioc container for.NET”有问题吗?没有,它使用相同的Ninject包。它简化了与MVC应用程序的集成。上述错误是否是由此引起的@UfukHacıoğullarıNope,你不是在用那个软件包。你正在手动集成它。谢谢老兄,我会的。。使用NinJect MVC3我正在使用Pro ASP.NET MVC 5,这是本书的最新版本(2013年出版)。它确实使用IDependencyResolver的父类,如Steven的回答所示。不幸的是,我在输入代码时错过了它,结果遇到了这样一个问题:-)。在类NinjectDependencyResolver中,还要确保您引用的是System.Web.Mvc,我错误地使用了System.Web.Http.Dependencies,因为这是我从Resharper得到的建议。我遇到的正是这个问题!谢谢,这是一个很好的解决方案,对我来说非常有效。