Autofac のバグであると思われるものを見つけましたが、これを機能させるために可能な解決策または回避策があるかどうかを確認したかったのです。
基本的に、正常に動作する一般的なデコレータをセットアップしました。問題は、構成デリゲートで呼び出すBeginLifetimeScope()
とすぐに、同じタイプの複数のコンポーネントが誤って解決されることです。で構成デリゲートを使用しない場合、BeginLifetimeScope()
正しく機能します。残念ながら、子スコープに依存関係を追加する必要があるため、構成デリゲートを使用しないという選択肢はありません。
問題を示す例を次に示します。
var builder = new ContainerBuilder();
builder.RegisterType<Dependency>()
.Named<IDependency<object>>("service");
builder.RegisterGenericDecorator(
typeof(Decorator<>), typeof(IDependency<>), "service", "decorated");
var container = builder.Build();
// Returns 1
var scope1 = container.BeginLifetimeScope();
Console.WriteLine(
scope1.ResolveNamed<IEnumerable<IDependency<object>>>("decorated").Count());
// Returns 2 - notice the configAction doesn't even have to do anything
var scope2 = container.BeginLifetimeScope(r => { });
Console.WriteLine(
scope2.ResolveNamed<IEnumerable<IDependency<object>>>("decorated").Count());
そして、ここに私の偽のタイプがあります:
interface IDependency<T> { }
class Dependency : IDependency<object> { }
class Decorator<T> : IDependency<T> {}
どんな助けでも大歓迎です!