为什么来自Nupack的生成的NinjectMVC3.C不编译? (或者在ASP.NET MVC 3 beta中发生的MVCServicElocator发生了什么?)
-
28-09-2019 - |
题
使用nupack addin并安装ninject MVC 3软件包导致生成的编译错误 NinjectMVC3.cs
文件。
The name 'MvcServiceLocator' does not exist in the current context
这 示例视频 大卫·埃博(David Ebbo)发布了 在09:43工作正好.
这是当前生成的类:
public class NinjectMVC3 {
public static void RegisterServices(IKernel kernel) {
//kernel.Bind<IThingRepository>().To<SqlThingRepository>();
}
public static void SetupDependencyInjection() {
// Create Ninject DI Kernel
IKernel kernel = new StandardKernel();
// Register services with our Ninject DI Container
RegisterServices(kernel);
// Tell ASP.NET MVC 3 to use our Ninject DI Container
MvcServiceLocator.SetCurrent(new NinjectServiceLocator(kernel));
}
}
解决方案
基本上, MvcServiceLocator
已经消失了。我想,每当视频制作时,版本都有不匹配。
将使NINIGENT工作的两个步骤如下。代替 NinjectMVC3
使用以下(我还更改了不需要的名称):
public class NinjectResolver : IDependencyResolver
{
private static IKernel kernel;
public NinjectResolver()
{
kernel = new StandardKernel();
RegisterServices(kernel);
}
public static void RegisterServices(IKernel kernel)
{
//kernel.Bind<IThingRepository>().To<SqlThingRepository>();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
}
并将以下行添加到 App_Start()
在 gloabl.asax.cs
DependencyResolver.SetResolver(new NinjectResolver());
其他提示
我已经修复了包裹并将其上传到供稿。如果您有机会尝试并验证它现在起作用,那就太好了。我将ninject.mvc3的版本从0.1到0.2 :)
我刚刚安装了ninject.mvc3 0.3。我正在使用ASP.NET MVC 3 Beta。
我已经将此代码添加到我的 Global.asax.cs
文件:
public static void RegisterServices(IKernel kernel)
{
kernel.Bind<IProductRepository>().To<SqlProductRepository>();
}
public void SetupDependencyInjection()
{
IKernel kernel = new StandardKernel();
RegisterServices(kernel);
DependencyResolver.SetResolver(new Ninject.Mvc3.NinjectServiceLocator(kernel));
}
而且我添加了一个电话 SetupDependencyInjection()
进入 Application_Start()
功能,看起来像这样:
protected void Application_Start()
{
SetupDependencyInjection();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
这 IProductRepository
和 SqlProductRepository
是我在型号文件夹中上课的类,我已经在我的 HomeController
. 。这是代码:
private IProductRepository products;
public HomeController(IProductRepository productRepository)
{
products = productRepository;
}
我添加了一些断点并运行了应用程序,它就像魅力一样工作。希望这可以帮助。
不隶属于 StackOverflow