Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Asp.net mvc 2 MVC2&;Ninject 2-控制器未解析依赖项_Asp.net Mvc 2_C# 4.0_Ninject 2_Ninject Extensions - Fatal编程技术网

Asp.net mvc 2 MVC2&;Ninject 2-控制器未解析依赖项

Asp.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

我愚蠢地决定在周五的工作中尝试新的东西

因此,我使用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;

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让我失望了,我真的希望这只是一个愚蠢的打字错误/缺行

提前谢谢


p

Ninject不会更改程序集的编译方式!它不会神奇地添加对其他程序集的引用或使用指令添加。如果要使用来自其他程序集的接口,则必须添加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());
    }
  }
}