Tôi đã một thuộc tính phương pháp mà hy vọng một vài thuộc tính được tiêm bởi Ninject 2, nhưng userSession
và jobRepository
đang mọc lên như null:Ninject 2 tiêm tài sản cho ActionFilterAttribute không làm việc
[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);
}
}
Và đây là phương pháp trong bộ điều khiển:
[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
return View(job.Building);
}
Tôi biết tôi có thiết lập làm việc vì nếu tôi sử dụng bộ khởi tạo trên bộ điều khiển thì tham số của bộ điều khiển sẽ được tiêm. Điều đó không giúp tôi nhiều cho các thuộc tính mặc dù cần phải sử dụng tiêm tài sản. Am i thiếu cái gì ở đây?
Dưới đây là các potions thích hợp của 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>();
}
}
Vậy đó! Các tài sản phải có một setter công cộng để được tiêm bởi Ninject. Tôi sẽ không nghĩ rằng đó sẽ là vấn đề. – DavGarcia
Cảm ơn câu trả lời này - Tôi đã tìm kiếm ở mọi nơi giải pháp cho vấn đề chính xác này. – Mustafakidd