Asp.net mvc 2 MVC2&;Ninject 2-控制器未解析依赖项
我愚蠢地决定在周五的工作中尝试新的东西 因此,我使用NuGet将Ninject.Web.MVC2.2.x.x添加到我的.NETMVC2项目中 我已经更改了我的Global.asax.csAsp.net mvc 2 MVC2&;Ninject 2-控制器未解析依赖项,asp.net-mvc-2,c#-4.0,ninject-2,ninject-extensions,Asp.net Mvc 2,C# 4.0,Ninject 2,Ninject Extensions,我愚蠢地决定在周五的工作中尝试新的东西 因此,我使用NuGet将Ninject.Web.MVC2.2.x.x添加到我的.NETMVC2项目中 我已经更改了我的Global.asax.cs using System.Web.Mvc; using System.Web.Routing; using IntegraRecipients; using Mailer; using Ninject; using Ninject.Web.Mvc; using Ninject.Modules; namespa
using System.Web.Mvc;
using System.Web.Routing;
using IntegraRecipients;
using Mailer;
using Ninject;
using Ninject.Web.Mvc;
using Ninject.Modules;
namespace WebMailer
{
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Mail", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected override void OnApplicationStarted()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
protected override IKernel CreateKernel()
{
return new StandardKernel(new INinjectModule[] { new MailModule()});
}
internal class MailModule : NinjectModule
{
public override void Load()
{
Bind<IMailing>().To<Mailing>();
Bind<IMailingContext>().To<MailingContext>();
Bind<IRecipientContext>().To<RecipientContext>();
}
}
}
但控制员仍然坚持认为
找不到类型或命名空间名称“IRecipientContext”(是否缺少using指令或程序集引用?)
及
找不到类型或命名空间名称“IMailingContext”(是否缺少using指令或程序集引用?)
我的google fu让我失望了,我真的希望这只是一个愚蠢的打字错误/缺行
提前谢谢
pNinject不会更改程序集的编译方式!它不会神奇地添加对其他程序集的引用或使用指令添加。如果要使用来自其他程序集的接口,则必须添加using指令和对此程序集的引用
Ninject所要做的就是在运行时连接您的应用程序。我有一个类似的问题 我有一个简单的WPF窗口项目,其中链接了编译后的Ninject.dll。然而,以下是给我的错误
using Ninject;
namespace CatalogueManager
{
public class ServiceLocator
{
public IMainWindowViewModel GetMainWindowViewModel()
{
return Kernel.Get<IMainWindowViewModel>();
}
static IKernel Kernel;
static ServiceLocator()
{
Kernel = new StandardKernel(new NinjectConfiguration());
}
}
}
使用Ninject;
命名空间目录管理器
{
公共类服务定位器
{
公共IMainWindowViewModel GetMainWindowViewModel()
{
返回Kernel.Get();
}
静态IKernel核;
静态ServiceLocator()
{
内核=新的标准内核(新的NinjectConfiguration());
}
}
}
特别是,“Ninject”名称空间和IKernel提示编译时消息“找不到类型或名称空间“X…”这两个上下文分别位于各自的类库中。我有单元测试来覆盖他们,所以他们自己工作。。。如果我只是将using引用放到控制器中,一切都会正常工作。我只是在一个新的解决方案中创建了一个新的MVC2应用程序,添加了一个带有IService/服务的类库,它只返回一个字符串。添加了与上面相同的Ninject,控制器仍然要求我添加使用blah;看来我误解了你的问题。您应该提到这是一个编译器错误。看到更新的答案这是我最初的猜测,但我看到像这样的问题。。。您需要对依赖项(接口)的引用,以便编译器知道它们。但是您不一定需要对依赖项实现的引用。嗨,George,这可能是一个不同的问题。它们的关键区别在于,我的解决方案并没有解析我的类库,而你们的解决方案并没有解析ninject类库。我会确保它们被引用并且可用,并检查您是否需要WPF特定的ninject引用,但我不写WPF,所以我可能不是最好的回答人。。。如果你仍然有问题,最好问一个新问题。
using Ninject;
namespace CatalogueManager
{
public class ServiceLocator
{
public IMainWindowViewModel GetMainWindowViewModel()
{
return Kernel.Get<IMainWindowViewModel>();
}
static IKernel Kernel;
static ServiceLocator()
{
Kernel = new StandardKernel(new NinjectConfiguration());
}
}
}