here's code sample:
class item { public item(ifoo foo) { // expected useful foo got fake foo } } interface ifoo { } class fakefoo : ifoo { } class usefulfoo : ifoo { func<item> _itemfactory; public usefulfoo(func<item> itemfactory) { _itemfactory = itemfactory; } public void initialize() { _itemfactory(); } } class program { static void main(string[] args) { var builder = new containerbuilder(); builder.registertype<item>().asself(); builder.registertype<usefulfoo>().as<ifoo>().asself().instanceperlifetimescope() .onactivated( x => x.instance.initialize()); builder.registertype<fakefoo>().as<ifoo>().singleinstance(); var container = builder.build(); // fake foo var fakefoo = container.resolve<ifoo>(); // owned<usefulfoo> var scoped = container.resolve<owned<usefulfoo>>(); } } i expect func<item> resolved in owned<usefulfoo> scope put usefulfoo item constructor ( because it's owned scope, isn't it? ). in item constructor have fakefoo. why?
what i'm trying achieve have 2 ifoo implementation: fakefoo global scope , usefulfoo owned scope.
with autofac, rule "last 1 in wins."
if register more 1 component exposes service, last 1 register 1 gets resolved. in case, register fakefoo after usefulfoo. when resolve owned<t> object, you're resolving usefulfoo - when resolve item, takes ifoo... , last ifoo implementation registered fakefoo.
if need usefulfoo default implementation of ifoo, register last.
Comments
Post a Comment