Dada esta clase:LogManager.GetLogger con Unity
class Foo
{
readonly ILog log;
public Foo(ILog log)
{
this.log = log;
}
...
}
Me gustaría configurar la unidad para inyectar ILOG. Eso es fácil:
container.RegisterInstance<ILog>(LogManager.GetLogger(typeof(XYZ)));
pero me gustaría hacer una llamada Unidad LogManager.GetLogger
con el tipo del tipo padre en vías de solución.
Esto está cerca:
container.RegisterType<ILog>(new InjectionFactory((c, t, s) => LogManager.GetLogger(t)));
Pero t
en este caso es del tipo resolverse (ILog
), no es el tipo que el objeto se resuelve por (Foo
).
Sé que puedo hacer esto:
container.RegisterType<Foo>(new InjectionFactory(c => new Foo(LogManager.GetLogger(typeof(Foo)));
pero no quiero tener que añadir que la declaración loca cada vez que registre un objeto.
Sé que esto se puede hacer en Autofac, y sé que la verdadera respuesta es no utilizar Unity en primer lugar, pero ¿se puede hacer esto? :)
Gracias, Terminé yendo con algo basado en el mismo modelo. Una cosa que encontré es que tuve que implementar IRecovery para manejar casos donde no se llamó a PostBuildUp. –
_PostBuildUp_ de _TrackingStrategy_ no se llamó? Hasta donde sé, esto solo es posible si la estrategia declara que la compilación está completa en _PreBuildUp_ (que no) o si hay una excepción en algún lugar de la interconexión que interrumpe prematuramente la cadena. –
eso es correcto. No estoy seguro de si hubo excepciones, pero tenemos algunas [OptionalDependencies] que podrían no cargarse, por lo que no hay nada para * PostBuildUp *. –