0

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

所以我使用 NuGet 将 Ninject.Web.Mvc 2.2.xx 添加到我的 .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 让我失望了,我真的希望这只是一个愚蠢的错字/缺失的事情

提前致谢

4

2 回答 2

1

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

Ninject 的全部目的是在运行时连接您的应用程序。

于 2011-03-25T17:13:29.903 回答
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'...”

于 2011-04-06T15:38:55.497 回答