7

我已經通過Ninject 2被注入其中預計幾個屬性的方法屬性,但userSessionjobRepository都上來爲空:Ninject 2房產注射液ActionFilterAttribute不工作

[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>(); 
    } 
} 

回答

13

Ninject2不做字段注入,其與公共setter方法更改爲屬性。

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

    [Inject] 
    public IJobRepository JobRepository 
    { set; private get; } 
} 

從Ninject 2 Beta版announcement

的事情,是在Ninject 1.x的是 不在Ninject 2:

  • 字段注入:Ninject 2的 注射現在由表達式 樹驅動,而在.NET 3.5中,無法使用 樹設置字段值的方式 。由於這是一個不好的做法 無論如何,我決定削減它。
+0

就是這樣!這些屬性必須有一個公共setter才能被Ninject注入。我不會認爲這很重要。 – DavGarcia 2010-02-15 23:17:41

+0

感謝這個答案 - 我到處尋找解決這個問題的方法。 – Mustafakidd 2011-02-28 06:43:44