ninject 3 merender contoh konteks objek

Entity Framework 4, Ninject 3, MVC3 Saat ini di aplikasi web saya, saya telah menggunakan pendekatan yang agak sederhana untuk setiap permintaan instantiasi Konteks Objek. Jadi saya bereksperimen dengan Ninject, dan beberapa kode contoh lama, tetapi saya tidak yakin bagaimana melanjutkan dengan yang berikut ini.. Secara efektif saya ingin dapat melakukan hal yang setara dengan di controller: DB_Entities.Current.Albums ... Haruskah saya akan membuat instance StandardKernel setiap saat? Sampel yang saya lihat menggunakan yang berikut: MvcApplication.Container.Get(); tetapi di Ninject 3 dengan hookup App_Start saya tidak memiliki akses ke Container..

Upaya saya untuk mereplikasi baris di atas, gagal saat runtime.

using MusicStoreEntities;
using Ninject;
using TestMVC3WithIOC.App_Start;
using System.Data.Objects;

namespace TestMVC3WithIOC.Models
{
    public partial class MusicStoreEntities
    {
        public static MusicStoreEntities Current
        {
        get
        {
            using (IKernel kernel = new StandardKernel())
            {
            return (MusicStoreEntities)kernel.Get<ObjectContext>();
            }
        }
        }
    }
}

Perhatikan juga, bahwa di App_Start\NinjectWebCommon.cs saya memiliki modifikasi berikut:

    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<ILogger>().To<NLogger>();
        kernel.Bind<ObjectContext>().To<MusicStoreEntities>().InRequestScope();

    } 

person user1740742    schedule 13.11.2012    source sumber


Jawaban (1)


person    schedule
comment
oke, saya tidak punya masalah dalam meneruskan IEntities, tetapi metode sebelumnya berdasarkan Ninject lama tidak memiliki parameter, sedangkan yang ini memerlukannya, bagaimana cara saya membuat instance pabrik itu? Apakah Application_Start tempat terbaik?? - person user1740742; 14.11.2012
comment
@ user1740742 Anda tidak perlu membuat instance kelas, jika Anda telah menambahkan semua binding ke kernel. Ninject harus menangani instantiasi melalui kernel.Get<T>(). - person McGarnagle; 14.11.2012