Ninject 2 حقن الممتلكات لـ ActionFilterattribute لا يعمل
-
20-09-2019 - |
سؤال
لديّ سمة طريقة تتوقع حقن العديد من الخصائص بواسطة Ninject 2 ، ولكن userSession
و jobRepository
قادمون على أنها خالية:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class JobAttribute : ActionFilterAttribute {
[Inject]
private IUserSession userSession;
[Inject]
private IJobRepository jobRepository;
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var filter = new JobFilter(userSession, jobRepository);
filter.OnActionExecuting(filterContext);
}
}
وهنا الطريقة في وحدة التحكم:
[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
return View(job.Building);
}
أعلم أن لدي الإعداد يعمل لأنه إذا استخدمت حقن المنشئ على وحدة التحكم ، يتم حقن معلمات وحدة التحكم. هذا لا يساعدني كثيرًا على السمات على الرغم من الحاجة إلى استخدام حقن الممتلكات. نسيت شيئا ما هنا؟
فيما يلي الجرعات ذات الصلة من Global.asax.cs:
public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication {
protected override void OnApplicationStarted() {
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
...snip...
protected override IKernel CreateKernel() {
return new StandardKernel(
new RepositoryConfiguration(),
new AuthenticationModule(),
new AutoMapperConfiguration()
);
}
}
public class RepositoryConfiguration : NinjectModule {
public override void Load() {
Bind<ICustomerRepository>().To<CustomerRepository>();
Bind<IJobRepository>().To<JobRepository>();
}
}
public class AuthenticationModule : NinjectModule {
public override void Load() {
Bind<MbdQuote.Core.AppService.IUserSession>().To<UserSession>();
}
}
المحلول
Ninject2 لا يقوم بالحقن الميداني ، ويغيرها إلى خصائص مع مراسلة عامة.
class JobAttribute : ActionFilterAttribute {
[Inject]
public IUserSession UserSession
{ set; private get; }
[Inject]
public IJobRepository JobRepository
{ set; private get; }
}
من Ninject 2 Beta إعلان:
الأشياء التي كانت في Ninject 1.x ليست في Ninject 2:
- الحقن الميداني: حقن Ninject 2 مدفوعًا الآن بأشجار التعبير ، وفي .NET 3.5 لا توجد طريقة لضبط قيم المجال مع شجرة تعبير. بما أن هذه ممارسة سيئة على أي حال ، قررت قطعها.
لا تنتمي إلى StackOverflow