7

我有一个方法属性,它期望 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>();
    }
}
4

1 回答 1

13

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 中无法使用表达式树设置字段值。由于无论如何这是一个不好的做法,我决定削减它。
于 2010-02-15T23:12:21.350 回答