La documentación indica que Autofac apoya genéricos abiertos y yo soy capaz de registrar y resolver en un caso básico de este modo:Autofac con Open Genéricos y tipo especificado en tiempo de ejecución
Registro:
builder.RegisterGeneric(typeof(PassThroughFlattener<>))
.As(typeof(IFlattener<>))
.ContainerScoped();
Resolve:
var flattener = _container.Resolve<IFlattener<Address>>();
El código anterior funciona bien. Sin embargo, en el supuesto que no voy a saber el tipo proporcionado a IFlattener hasta el tiempo de ejecución, lo que quiero hacer algo como esto:
object input = new Address();
var flattener = (IFlattener)_container.Resolve(typeof(IFlattener<>), new TypedParameter(typeof(IFlattener<>), input.GetType()));
¿Es esto posible con autofac? Tengo la idea de la siguiente usando StructureMap:
http://structuremap.sourceforge.net/Generics.htm
que estoy tratando de lograr el mismo objetivo descrito en este artículo.
Gracias por la respuesta rápida, ¡eso funciona! –