MVC2& Ninject2 - 控制器无法解析依赖关系

时间:2011-03-25 16:36:57

标签: asp.net-mvc-2 c#-4.0 ninject-2 ninject-extensions

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

所以我使用NuGet将Ninject.Web.Mvc 2.2.x.x添加到我的.Net MVC2项目中。

我改变了我的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>();
        }
    }
}

}

我已经创建了一个像这样的控制器......

using System.Linq;
using System.Web.Mvc;
using WebMailer.Models;

namespace WebMailer.Controllers
{
    [ValidateInput(false)]
    public class MailController : Controller
    {
        private readonly IMailingContext _mailContext;
        private readonly IRecipientContext _integraContext;

        public MailController(IMailingContext mail,IRecipientContext integra)
        {
            _mailContext = mail;
            _integraContext = integra;
        }

        public ActionResult Index()
        {
            return View(_mailContext.GetAllMailings().Select(mailing => new MailingViewModel(mailing)).ToList());
        }
    }
}

但是控制器仍然坚持

找不到类型或命名空间名称'IRecipientContext'(您是否缺少using指令或程序集引用?)

找不到类型或命名空间名称“IMailingContext”(您是否缺少using指令或程序集引用?)

我的google-fu让我失望了,我真的希望这只是一个愚蠢的错字/缺少线路的东西

提前致谢

P

2 个答案:

答案 0 :(得分:1)

Ninject不会改变程序集的编译方式!它不会神奇地添加对其他程序集的引用或添加使用指令。如果您正在使用其他程序集中的接口,则必须添加using指令和对此程序集的引用。

所有Ninject都是在运行时连接你的应用程序。

答案 1 :(得分:0)

我遇到了类似的问题。

我有一个简单的WPF Window项目,其中链接了已编译的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”命名空间和IKernel正在提示编译时消息“未找到类型或名称空间'X'......”

相关问题