私の同僚は、私たちのプロジェクトで Windsor TypedFactoryFacility をセットアップしました。
私は Windsor を初めて使用し、ファクトリとして登録する IServiceFactory インターフェイスのメソッドを実装する方法を理解していません。型パラメーター T を受け取り、T を返す Create メソッドを見たとき、おそらく内部でコンテナーの Resolve メソッドを呼び出しているのではないかと考えました。
Type をパラメーターとして取り、オブジェクトを返す Create のオーバーロードが必要です。コンテナーの Resolve メソッドには、次の両方のフレーバーがあるため:
T Resolve<T>(string key);
object Resolve(Type service);
Create のオーバーロードを追加するとうまくいくと思いました。代わりに、渡された Type I ではなく System.Object を解決しようとしているようです。
Windsor で Create メソッドを希望どおりに実装する方法はありますか? リフレクターでちょっと調べてみましたが、よくわかりません。
登録は次のとおりです。
container.AddFacility<TypedFactoryFacility>();
container.Register(
Component.For<IServiceFactory>()
.AsFactory()
.LifeStyle.Transient);
およびインターフェース自体:
public interface IServiceFactory
{
//Original Create method that works
T Create<T>();
//The overload that I need that throws an exception
object Create(Type service)
void Release(object service);
}