Ho un decoratore che ha alcune altre dipendenze che dovrebbero anche essere risolti usando il contenitore. Esempio:Registrare un decoratore in autofac senza specificare manualmente tutte le dipendenze
public class FooDecorator : IFoo
{
public FooDecorator(IFoo inner, IBar bar, IBaz baz)
}
posso registrare questo come questo:
builder.RegisterType<Foo>().As<IFoo>();
builder.RegisterDecorator<IFoo>((c, inner) =>
new FooDecorator(inner, c.Resolve<IBar>(), c.Resolve<IBaz>()), "key");
Questo è il lavoro, ma non così bella che devo specificare manualmente tutte le altre dipendenze. Quello che vorrei fare è:
builder.RegisterDecorator<FooDecorator, IFoo>("key");
Qualora il IFoo
viene risolto il 'interiore' IFoo
e le altre dipendenze sono risolte dal contenitore. È possibile, o posso registrare un decoratore con un Func che si tradurrà in questo comportamento?
Questo è fantastico, ma cosa succede se non si conosce (o si cura) che l'implementazione specifica di 'IFoo' è' Foo'? È possibile dichiarare qualcosa sulla falsariga di "decorare ciò che attualmente risolve in" IFoo' con 'FooDecorator'"? (supponendo che IFoo sia stato precedentemente registrato per fornire 'IFoo', ma non necessariamente come servizio _named_) - PS Penso che questo sia quello che cercava l'OP, anche –
@CristiDiaconescu non c'è una soluzione facile da fare e senza specificare un nome per il primo decoratore avrai 2 registrazioni nel contenitore Autofac. Sentiti libero di fare una nuova domanda se vuoi ulteriori dettagli su come ottenere ciò che desideri. –