c# - Autofac register derived types for an interface -


i have interface ibase many derived interfaces iderived1, iderived2. register implementations derived interfaces using autofac.

given derived interface, can write resolve method interface. i'm wondering is, there way can avoid enumerating list of derived interfaces when building container?

what have is:

public static void register<tderived>(containerbuilder b) tderived : ibase {     b.register(cc => derivedfactory.create<tderived>(cc.resolve<somedependency>())      .as<tderived>()      .instanceperlifetimescope(); }  // in registration method containerbuilder b = ... methodinfo genericregisterderivedmethod = this.gettype().getmethod("register", bindingflags.public | bindingflags.static); list<type> allderivedinterfaces = /* query across various assemblies interfaces extend ibase */  allderivedinterfaces.foreach(t => genericregisterderivedmethod      .makegenericmethod(t)     .invoke(null, new object[] { b }) ); 

what i'd have is:

public static void create<tderived>(icomponentcontext cc) tderived : ibase {     return derivedfactory.create<tderived>(cc.resolve<somedependency>()); }  // in registration method containerbuilder b = ... methodinfo genericresolvederivedmethod = this.gettype().getmethod("create", bindingflags.public | bindingflags.static);  b.registerderivedtypesof<ibase>((cc, t) => (ibase)genericresolvederivedmethod     .makegenericmethod(t)     .invoke(null, new object[] { cc, t }) ); 

this avoid me needing know full list of iderived interfaces when applications starts. possible?

i able solve using custom registration source, can build registration on fly each iderived interface service type gets requested.


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

java - Using an Integer ArrayList in Android -