ninject.web.mvc الوظيفة الإضافية لا تعمل مع ASP.NET MVC 2
سؤال
أنا أستخدم 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 اختيار المنشئ الخطأ لحلها.
لاختبار ذلك ، يمكنك وضع نقطة توقف في كل من المُنشئين ومعرفة أي حرائق واحدة ، لكن لدي شعور بأنها غير معلمة.
لا تنتمي إلى StackOverflow