Frage

Ich habe ein Verfahren Attribut, das mehr Eigenschaften erwartet von 2 Ninject injiziert werden, aber userSession und jobRepository anstehen als null:

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

Und hier ist das Verfahren in der Steuerung:

[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
    return View(job.Building);
}

Ich weiß, dass ich das Setup-Arbeits haben, denn wenn ich Konstruktor Injektion auf dem Controller die Parameter der Controller injiziert bekommen. Das hilft mir nicht viel für Attribute obwohl diese Notwendigkeit zu verwenden Eigenschaft Injektion. Bin ich etwas fehlt hier?

Hier sind die einschlägigen Tränken von 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>();
    }
}
War es hilfreich?

Lösung

Ninject2 nicht Feldeinkopplung tun, sie mit einem öffentlichen Setter Eigenschaften ändern.

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

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

Von der Ninject 2 Beta Ankündigung :

  

Dinge, die in Ninject 1.x waren, dass   in Ninject ist nicht 2:

     
      
  • Feld Injektion: Ninject 2 des   Injektion wird nun durch die Expression angetrieben   Bäume, und in .NET 3.5 gibt es keine Möglichkeit   Set zur Feldwert mit einem Expressions   Baum. Da es sich um eine schlechte Praxis   wie auch immer, ich beschlossen, es zu schneiden.
  •   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top