0

Autofac は、このようなコンポーネントを登録するときに「最適な」ctor を見つけます

builder.RegisterType<MyType>()...;
or
builder.RegisterType(typeof(MyType))...;

Autofac のリフレクション コードを再利用して ctor パラメーターを見つける方法を探しています。このロジックは公開 API で利用できますか?

上記の欲しい理由は…

コンパイル時に不明なタイプのコンポーネントがいくつかあります (=動的プロキシ)。現在、私はこのように登録しています

builder.Register(c =>
{
  var dep1 = c.Resolve<IFoo>();
  var dep2 = c.Resolve<IBar>();
  var dep3 = c.Resolve<IFooBar>();
  return someProxyFactory.CreateProxyFrom<MyType>(dep1, dep2, dep3);
}...;

---編集---

プロキシが関与していない場合でも、RegisterType を使用できない場合は、同じ質問が有効です。例えば...

builder.Register(c =>
{
  [...]
  if(something)
   return new SomeType(dep1, dep2, dep3);
  else
   return new SomeOtherType(dep1, dep4, dep2, dep5);
}

ここでも、可能であれば Autofac の「find ctor ロジック」を再利用したいと考えています。

---編集終了---

それは正常に動作しますが、可能であれば、autofac のロジックを使用して ctor の依存関係を見つけたいと思います。のようなものを書きたい

builder.Register(c =>
{
  object[] ctorDependencies = letAutofacDoTheSimilarWorkAsInRegisterType(typeof(MyType));
  return someProxyFactory.Create<MyType>(ctorDependencies);
}

これは可能ですか、それとも独自のロジックを作成する必要がありますか? または、このシナリオで使用できるまったく異なるアプローチはありますか?

4

1 に答える 1

0

私が推測した後の答えは完全ではありませんが、既存のDynamicProxy2を使用できますか?これにより、プロキシファクトリで行っているのと同じように、登録されたインターフェイスにインターセプターを接続できます。

更新:とによって実装されたAutofac.Core.Activators.Reflection名前空間のIConstructorFinderとインターフェイスを使用できる可能性があります。IConstructorSelectorPublicConstructorFinderMostParametersConstructorSelector

于 2012-12-20T08:11:27.097 に答える