0

私は愚かにも金曜日の仕事で何か新しいことを試みることにしました!

そこで、NuGetを使用してNinject.Web.Mvc2.2.xxを.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>();
        }
    }
}

}

そして私はそのようなコントローラーを作成しました...

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ディレクティブまたはアセンブリ参照がありませんか?)

私のグーグルフーは私に失敗しました、そして私はこれがただのばかげたタイプミス/行方不明のことであることを本当に望んでいます

前もって感謝します

P

4

2 に答える 2

1

Ninject は、アセンブリのコンパイル方法を変更しません! 他のアセンブリへの参照を魔法のように追加したり、using ディレクティブを追加したりすることはありません。他のアセンブリのインターフェイスを使用している場合は、using ディレクティブとこのアセンブリへの参照を追加する必要があります。

Ninject のすべては、実行時にアプリケーションを接続することです。

于 2011-03-25T17:13:29.903 に答える
0

同様の問題のように見えるものがあります。

コンパイル済みの Ninject.dll がリンクされた単純な WPF Window プロジェクトがあります。ただし、次のエラーが発生しています...

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 に答える