Question

I ai un attribut de méthode qui prévoit plusieurs propriétés à injecter par Ninject 2, mais userSession et jobRepository arrivent comme nulle:

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

Et voici la méthode dans le contrôleur:

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

Je sais que j'ai la configuration de travail parce que si j'utilise l'injection de constructeur sur le contrôleur des paramètres du contrôleur s'injecté. Cela ne me aide pas beaucoup pour les attributs cependant que besoin d'utiliser l'injection de la propriété. Est-ce que je manque quelque chose ici?

Voici les potions pertinentes de 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>();
    }
}
Était-ce utile?

La solution

Ninject2 ne fait pas l'injection sur le terrain, les changer de propriétés avec un setter public.

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

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

De la Ninject 2 Beta :

  

Les choses qui étaient dans 1.x Ninject que   ne sont pas en Ninject 2:

     
      
  • injection champ: ninject 2 de   injection est maintenant entraînée par l'expression   arbres, et dans .NET 3.5, il n'y a aucun moyen   pour définir des valeurs de champ avec une expression   arbre. Étant donné que c'est une mauvaise pratique   De toute façon, j'ai décidé de le couper.
  •   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top