Saya membuat proyek MVC3 baru, tekan F5, lihat halaman sampel.
Kemudian saya menggunakan NuGet untuk mendapatkan ekstensi Ninject.MVC . Saya memodifikasi global.asax saya sesuai dengan dokumentasi Ninject, Cara Mengatur Aplikasi MVC3 :
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional });
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
Sekarang ketika saya menjalankan aplikasi, saya mendapatkan layar kuning kematian dengan pengecualian berikut:
InvalidOperationException - Urutan tidak berisi elemen.
di System.Linq.Enumerable.Single (...)
di Ninject.Web.Mvc.Bootstrapper.Initialize (...) baris 67.
Dan benar saja, baris 67 dari file itu memanggil .Single (), sehingga memunculkan pengecualian.
Apa yang saya lakukan salah?
sumber
NinjectHttpApplication
) dan mengkonfigurasi kernel di~/App_Start/NinjectMVC3.cs
file (RegisterServices
metode).Saya harus menambahkan ini dengan harapan orang lain akan menyelesaikan masalah lebih cepat dan tidak ingin mencabut setiap helai rambut di kepala mereka seperti yang hampir saya lakukan.
Saya perlu mengganti nama semua dalam proyek saya agar sesuai dengan istilah bisnis baru. Saya mengubah ruang nama di mana-mana dan saya bahkan mengubah Nama Majelis (proyek klik kanan> properti> tab aplikasi) sehingga perakitan yang dihasilkan cocok dengan konvensi penamaan baru. Perakitan ulang nama inilah yang membuat Ninject sangat marah!
Dengan mengganti nama rakitan yang menghasilkan file baru dengan nama baru yang dibuat saat kita mengkompilasi. Namun, file lama dengan nama lama masih ada di direktori bin! Jika Anda mengaktifkan Ninject melalui kelas yang ditambahkan di App_Start, maka kelas aktivasi ini akan dipanggil di KEDUA rakitan (yang lama DAN yang baru diganti namanya). Jangan tanya saya bagaimana atau mengapa, tapi ya dan itu memberi Anda kesalahan "sudah diinisialisasi" ini.
Bahkan solusi pembersihan tidak berfungsi karena Visual Studio hanya akan menghapus biner yang dihasilkannya, yang akan menjadi yang baru diganti namanya. Itu meninggalkan yang lama sendirian hanya duduk di sana.
Hapus folder bin Anda sebelum Anda mencoba melakukan hal lain! Saya harap ini menyelamatkan orang lain dari membuang-buang jam kerja yang berharga!
sumber
Saya telah memperbarui dokumentasi Wiki yang ditautkan dalam pertanyaan Anda untuk menunjukkan kedua cara menyiapkan aplikasi MVC3. Saya menyarankan untuk menggunakan opsi kedua yang merupakan cara yang disukai untuk theNuGetpackage.
Alih-alih berasal dari NinjectHttpApplication, ia menggunakan NinjectMVC.cs di folder AppStart yang dibuat selama penginstalan paket. Ini juga merupakan lokasi tempat Anda membuat kernel dan tempat Anda memuat modul atau tempat Anda menentukan binding.
sumber
Seperti yang dikatakan Alex Ford:
Saya memiliki versi khusus dari masalah itu yang dapat diselesaikan sebagai berikut:
sumber
Solusi saya adalah saya telah menyetel properti folder App_Start, Penyedia Ruangnama ke True.
Saya telah mengubahnya menjadi False sehingga Resharper tidak akan menyorot namespace TIDAK cocok dengan struktur folder.
sumber
Ingin menambahkan satu alasan lagi ...
Kami menginstal paket Ninject.MVC3 ke beberapa proyek - hanya satu yang merupakan aplikasi MVC yang sebenarnya. Namun, kami lupa menghapus folder App_Start.
Menghapus folder App_Start dari proyek yang direferensikan menyelesaikan masalah.
sumber
Untuk mengikuti jawaban @ Chev ... ini adalah masalah terakhir saya juga. Jika Anda menerapkan ke Situs Web Azure (sekarang bernama AppSite), Anda ingin mengklik kotak ini di terbitkan untuk menghapus file lama
sumber