代码之家  ›  专栏  ›  技术社区  ›  DavGarcia

ActionFilterAttribute的Ninject 2属性注入不工作

  •  7
  • DavGarcia  · 技术社区  · 16 年前

    我有一个方法属性,它期望Ninject2注入几个属性,但是 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>();
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  13
  •   Lachlan Roche    16 年前

    Ninject2不进行字段注入,而是使用公共setter将其更改为属性。

    class JobAttribute : ActionFilterAttribute {
        [Inject]
        public IUserSession UserSession
        { set; private get; }
    
        [Inject]
        public IJobRepository JobRepository
        { set; private get; }
    }
    

    来自Ninject 2测试版 announcement :

    在Ninject 1.x中的东西 不在项目2中:

    • 现场注入:Ninject 2_ 现在注入是由表达式驱动的 树,在.NET 3.5中没有办法 使用表达式设置字段值 树。因为这是个坏习惯 不管怎样,我决定把它剪掉。
    推荐文章