ActionFilterattribute가 작동하지 않는 Ninject 2 속성 주입
-
20-09-2019 - |
문제
Nineject 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 베타에서 발표:
Nineject 1.x에 있던 것들은 Nineject 2 :
- 필드 주입 : Ninject 2의 주입은 이제 발현 나무에 의해 구동되며 .NET 3.5에서는 발현 트리로 필드 값을 설정할 방법이 없습니다. 어쨌든 이것은 나쁜 연습이기 때문에 나는 그것을 자르기로 결정했습니다.
제휴하지 않습니다 StackOverflow