【发布时间】:2013-08-31 10:07:46
【问题描述】:
我是 MVC 新手,我正在关注“Adam Freeman 的 PRO ASP.NET MVC 4”。我目前正在编写它的第 6 章。其中我正在学习如何使用 Ninject in MVC 4 进行依赖注入。我已经按照书中的描述创建了应用程序。现在我不明白为什么会出现以下错误:
该类型似乎没有实现 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
请帮助我,我该如何解决这个错误。
提前致谢。
【问题讨论】:
-
您也可以使用更容易集成的 Ninject.MVC3 包。它支持 MVC 4。
-
@UfukHacıoğulları 为什么? “Ninject Ioc container for .NET”有什么问题
-
不,它使用相同的 Ninject 包。它简化了与 MVC 应用程序的集成。
-
上述错误是不是因为这个? @UfukHacıoğulları
-
不,你没有使用那个包。您正在手动集成它。
标签: c# asp.net asp.net-mvc-4 ninject ninject.web.mvc