سؤال

أنا أستخدم Ninject.Web.Mvc (إصدار MVC 2) الوظيفة الإضافية مع ASP.NET MVC 2. هذا مقتطف من بلدي Global.asax.cs:

protected override void OnApplicationStarted()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes;
    // RegisterAllControllersIn() is not available in the MVC 2 version of Ninject
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibernateRepository>();

    return kernel;
}

لدي أيضا قاعدة RepositoryController:

public class RepositoryController : Controller
{
    protected IRepository Repository { get; set; }

    public RepositoryController()
    {

    }

    public RepositoryController(IRepository repository)
    {
        Repository = repository;
    }
}

لذلك كما ترون ، إنه إعداد بسيط للغاية حيث RepositoryController يتوقع حقن مع مثال IRepository, ، وتم تكوين Ninject لاستخدام مثيل ملموس NHibernateRepository. ومع ذلك ، هذا لا يعمل و Repository الخاصية لاغية كلما حاولت الوصول إليها في وحدة تحكم. ومع ذلك ، إذا قمت بتغيير الرمز إلى هذا بدلاً من ذلك:

[Inject]
public IRepository Repository { get; set; }

ثم يعمل بشكل جيد. هل يعرف أي شخص لماذا لا يعمل حقن المنشئ ، لكن حقن الممتلكات؟

هل كانت مفيدة؟

المحلول

حاول إزالة مُنشئ المعلمة.

قد يكون Ninject اختيار المنشئ الخطأ لحلها.

لاختبار ذلك ، يمكنك وضع نقطة توقف في كل من المُنشئين ومعرفة أي حرائق واحدة ، لكن لدي شعور بأنها غير معلمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top