Tuesday, 15 June 2010

c# - Register a decorator in autofac without manually specifying all dependencies -



c# - Register a decorator in autofac without manually specifying all dependencies -

i have decorator has other dependencies should resolved using container. example:

public class foodecorator : ifoo { public foodecorator(ifoo inner, ibar bar, ibaz baz) }

i can register this:

builder.registertype<foo>().as<ifoo>(); builder.registerdecorator<ifoo>((c, inner) => new foodecorator(inner, c.resolve<ibar>(), c.resolve<ibaz>()), "key");

this working, not nice have manually specify other dependencies. is:

builder.registerdecorator<foodecorator, ifoo>("key");

where ifoo resolved 'inner' ifoo , other dependencies resolved container. possible, or can register decorator func result in behaviour?

in order avoid specifying dependencies manually, should register decorator in autofac , resolve within first parameter of registerdecorator method.

builder.registertype<foo>() .named<ifoo>("original"); builder.registertype<foodecorator>() .named<ifoo>("decorator"); builder.registerdecorator<ifoo>((c, inner) => c.resolvenamed<ifoo>("decorator", typedparameter.from(inner)), "original") .as<ifoo>();

registering decorator using named registration avoid conflicts.

c# dependency-injection decorator autofac

No comments:

Post a Comment