c# - Having trouble resolving components in owned scope with Autofac -


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