首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC2和Ninject2 -控制器未解析依赖关系

MVC2和Ninject2 -控制器未解析依赖关系
EN

Stack Overflow用户
提问于 2011-03-26 00:36:57
回答 2查看 411关注 0票数 0

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

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

我修改了我的Global.asax.cs

代码语言:javascript
复制
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>();
        }
    }
}

}

我已经创建了一个控制器,如下所示。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-26 01:13:30

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

所要做的就是在运行时将你的应用程序连接起来。

票数 1
EN

Stack Overflow用户

发布于 2011-04-06 23:38:55

我也遇到了类似的问题。

我有一个简单的WPF窗口项目,其中链接了编译后的Ninject.dll。然而,下面的代码给了我错误...

代码语言:javascript
复制
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‘未找到...“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5435371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档