ioc container - AutoFac - Instantiating an unregistered service with known services -
instantiating unregistered service known services (injecting them via ctr).
i want avoid container pollution.
here way resolve unregistered concrete types container. note autofac constructor finding , selecting logic, registration event handlers remain in force.
first, define method:
public static object resolveunregistered(this icomponentcontext context, type servicetype, ienumerable<parameter> parameters) { var scope = context.resolve<ilifetimescope>(); using (var innerscope = scope.beginlifetimescope(b => b.registertype(servicetype))) { icomponentregistration reg; innerscope.componentregistry.trygetregistration(new typedservice(servicetype), out reg); return context.resolvecomponent(reg, parameters); } }
the idea component registration derived context , resolve in current context. can create handy overloads:
public static object resolveunregistered(this icomponentcontext context, type servicetype) { return resolveunregistered(context, servicetype, enumerable.empty<parameter>()); } public static object resolveunregistered(this icomponentcontext context, type servicetype, params parameter[] parameters) { return resolveunregistered(context, servicetype, (ienumerable<parameter>)parameters); } public static tservice resolveunregistered<tservice>(this icomponentcontext context) { return (tservice)resolveunregistered(context, typeof(tservice), enumerable.empty<parameter>()); } public static tservice resolveunregistered<tservice>(this icomponentcontext context, params parameter[] parameters) { return (tservice)resolveunregistered(context, typeof(tservice), (ienumerable<parameter>)parameters); }
Comments
Post a Comment