ドキュメントには、Autofacがオープンジェネリックをサポートしていると記載されており、次のような基本的なケースで登録して解決することができます。
登録:
builder.RegisterGeneric(typeof(PassThroughFlattener<>))
.As(typeof(IFlattener<>))
.ContainerScoped();
解決:
var flattener = _container.Resolve<IFlattener<Address>>();
上記のコードは問題なく機能します。ただし、実行時までIFlattenerに提供されるタイプがわからないと仮定して、次のようなことを行います。
object input = new Address();
var flattener = (IFlattener)_container.Resolve(typeof(IFlattener<>), new TypedParameter(typeof(IFlattener<>), input.GetType()));
AutoFacでこれは可能ですか?StructureMapを使用して、次のアイデアからアイデアを得ました。
http://structuremap.sourceforge.net/Generics.htm
私はこの記事で概説されているのと同じ目標を達成しようとしています。