Tengo una situación en la que deseo que la dependencia inycione mi objeto de usuario, pero también coloque al usuario actual en el contenedor de IoC. Quiero que las siguientes líneas de trabajo:En Ninject 2.0, ¿cómo puedo tener un enlace general y un enlace para un caso específico?
kernel.Get<User>(); // Should return a new User()
kernel.Get<User>("Current"); // Should return the current user
uno podría pensar encuadernaciones como esto funcionaría:
Bind<User>().ToSelf();
Bind<User>().ToMethod(LoadCurrentUser).InRequestScope().Named("Current");
Por supuesto, eso da:
Ninject.ActivationException: Error activating User More than one matching bindings are available. Activation path: 1) Request for User Suggestions: 1) Ensure that you have defined a binding for User only once.
entiendo el error ya que una La vinculación con nombre no restringe la aplicación de esa vinculación, por lo que se aplican ambas vinculaciones. Parece claro que necesito usar el enlace contextual con los métodos .When *() pero no puedo encontrar ninguna forma de hacerlo. Siento que debería haber cuando los métodos que detectan si se aplica una instancia con nombre. Algo así como:
// Not valid Ninject syntax
Bind<User>().ToSelf().WhenUnnamedRequested();
Bind<User>().ToMethod(LoadCurrentUser).WhenNamedRequested().InRequestScope().Named("Current");
No puedo encontrar ningún lugar en la interfaz IRequest
o no lo tenga propiedades que me dice el nombre solicitado. ¿Cómo hago esto?
siento por el largo retraso en la respuesta, no puedo hacer ninguna de estas porque cuando se solicita un nuevo usuario, lo que está sucediendo a través de NHibernate. Entonces no puedo agregar un nombre o un atributo a eso. Podría en los casos en que quiera el usuario actual, pero luego se aplicará el nuevo enlace de usuario. –