Domanda

Ho un attributo metodo che prevede diverse proprietà da iniettare da Ninject 2, ma userSession e jobRepository stanno arrivando nullo:

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

E qui è il metodo nel controller:

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

So di avere la messa a punto di lavoro, perché se io uso l'iniezione del costruttore sul controller parametri del regolatore vengono iniettati. Questo non mi aiuta molto per gli attributi che però necessità di utilizzare l'iniezione di proprietà. Mi sto perdendo qualcosa qui?

Ecco le pozioni pertinenti della 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>();
    }
}
È stato utile?

Soluzione

Ninject2 non fa iniezione campo, cambiarli per immobili con un setter pubblico.

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

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

Dal Ninject 2 Beta :

  

Le cose che erano in Ninject 1.x che   non sono in Ninject 2:

     
      
  • iniezione Campo: Ninject 2 del   iniezione è ora guidato da espressione   alberi, e in .NET 3.5 non c'è modo   per impostare valori di campo con un'espressione   albero. Poiché si tratta di una cattiva pratica   in ogni caso, ho deciso di tagliarla.
  •   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top