ninja 3 เรนเดอร์อินสแตนซ์บริบทของวัตถุ

Entity Framework 4, Ninject 3, MVC3 ขณะนี้อยู่ในเว็บแอปของฉัน ฉันได้ใช้วิธีการที่ค่อนข้างพื้นฐานในการสร้างอินสแตนซ์บริบทของวัตถุต่อคำขอ ดังนั้นฉันจึงทดลองกับ Ninject และโค้ดตัวอย่างเก่าบางส่วน แต่ฉันไม่แน่ใจว่าจะดำเนินการอย่างไรต่อไปนี้ .. อย่างมีประสิทธิภาพ ฉันต้องการให้ตัวควบคุมทำสิ่งเทียบเท่ากับ: DB_Entities.Current.Albums ... ฉันควรจะ กำลังสร้างอินสแตนซ์ StandardKernel ทุกครั้งหรือไม่ ตัวอย่างที่ฉันกำลังดูใช้สิ่งต่อไปนี้: MvcApplication.Container.Get(); แต่ใน Ninject 3 ที่มีการเชื่อมต่อ App_Start ฉันไม่สามารถเข้าถึงคอนเทนเนอร์ได้ ..

ความพยายามของฉันในการทำซ้ำบรรทัดด้านบน ล้มเหลวขณะรันไทม์

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>();
            }
        }
        }
    }
}

นอกจากนี้ โปรดทราบว่าใน App_Start\NinjectWebCommon.cs ฉันมีการแก้ไขต่อไปนี้:

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

    } 

person user1740742    schedule 13.11.2012    source แหล่งที่มา


คำตอบ (1)


person    schedule
comment
ตกลง ฉันไม่มีปัญหาในการส่งผ่าน IEntities แต่วิธีการก่อนหน้านี้ที่ใช้ Ninject รุ่นเก่านั้นไม่มีพารามิเตอร์ ในขณะที่วิธีนี้ต้องใช้อย่างใดอย่างหนึ่ง ฉันควรจะสร้างอินสแตนซ์ของโรงงานนั้นได้อย่างไร Application_Start เป็นสถานที่ที่ดีที่สุดหรือไม่? - person user1740742; 14.11.2012
comment
@ user1740742 คุณไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาสหากคุณได้เพิ่มการเชื่อมโยงทั้งหมดเข้ากับเคอร์เนล Ninject ควรจัดการการสร้างอินสแตนซ์ผ่าน kernel.Get<T>() - person McGarnagle; 14.11.2012