Mit Ninject kann ich so etwas tun:Zugriff auf Kontextinformationen während der Lambda-Registrierung in Autofac?
Bind<ILogger>().ToMethod(context =>
{
// Get type info
var type = context.Request.Target.Member.DeclaringType;
var logger = new ConcreteLogger(type);
Kernel.Get<IFoo>().DoFoo(logger);
return logger;
});
Wie kann ich dies tun, mit Autofac?
Dies ist der Code, den ich habe:
builder.Register(context => {
var type = ?????
var logger = new ConcreteLogger(type);
context.Resolve<IFoo>().DoSomething(logger);
return logger;
}).As<ILogger>();
ich im Debugger sehen können, dass context
tatsächlich von der Art ist, Autofac.Core.Resolving.InstanceLookup
die ein Mitglied hat ComponentRegistration.Target
aber das kann ich nicht zugreifen, da InstanceLookup
eine interne Klasse ist.
Es scheint, kann ich dies tun, aber es gibt mir nicht die Typinformationen der Klasse, die diese injiziert Typ erfordert:
builder.Register(context => {
var lookup = c as IInstanceLookup;
var target = lookup.ComponentRegistration.Target as ComponentRegistration;
var logger = new ConcreteLogger(target.Activator.LimitType);
context.Resolve<IFoo>().DoSomething(logger);
return logger;
}).As<ILogger>();
vielleicht http://stackoverflow.com/questions/11691583/autofac-register-component-and-resolve-depending-on-resolving-parent kann helfen? –