Dav*_*cia 7 c# asp.net-mvc ninject property-injection actionfilterattribute
我有期望几个属性由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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是控制器中的方法:
[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
return View(job.Building);
}
Run Code Online (Sandbox Code Playgroud)
我知道我的设置有效,因为如果我在控制器上使用构造函数注入,则会注入控制器的参数.虽然需要使用属性注入,但这对属性没有多大帮助.我在这里错过了什么吗?
以下是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>();
}
}
Run Code Online (Sandbox Code Playgroud)
Lac*_*che 13
Ninject2不进行字段注入,使用公共setter将它们更改为属性.
class JobAttribute : ActionFilterAttribute {
[Inject]
public IUserSession UserSession
{ set; private get; }
[Inject]
public IJobRepository JobRepository
{ set; private get; }
}
Run Code Online (Sandbox Code Playgroud)
来自Ninject 2 Beta 公告:
Ninject 1.x中没有出现在Ninject 2中的东西:
- 现场注入:Ninject 2的注入现在由表达式树驱动,而在.NET 3.5中,无法使用表达式树设置字段值.因为这是一个不好的做法,我决定削减它.
| 归档时间: |
|
| 查看次数: |
3457 次 |
| 最近记录: |