私の同僚は、プロジェクトでWindsor TypedFactoryFacilityを設定しました。TypedFactoryウィンザーはどのようなコントロールを実装していますか?
私はWindsorを初めて使い、ファクトリとして登録するIServiceFactoryインターフェイスのメソッドをどのように実装しているのか分かりません。型パラメータTをとりTを返すCreateメソッドを見たとき、おそらくコンテナのResolveメソッドを呼び出していると考えました。
パラメータとしてTypeをとり、オブジェクトを返すCreateのオーバーロードが必要です。コンテナの解決方法は、これらの味の両方を持っているので:
T Resolve<T>(string key);
object Resolve(Type service);
私は作成の過負荷を加えることは働くだろうと思いました。代わりに、タイプIの代わりにSystem.Objectを解決しようとしているようです。
ウィンザーを自分の作成メソッドを私が望むように実装する方法はありますか?私はリフレクターでちょっと突っ込んだが、それを理解することはできない。ここで
が登録され:
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);
}
IServiceFactoryは、インターフェイス(内部はCastle Windsorによって実装されています)ですので、拡張メソッドを使用しないでください。 – Stumblor
@Stumblorあなたは間違っています。このような状況で拡張メソッドが機能しました。答えを書いたときの完全な作業コードの例を追加しました。 [拡張メソッドのMSDN](http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx)から: "拡張メソッドを使用して、クラスまたはインターフェイスを拡張できますが、それらをオーバーライドすることはできません。 "私の答えを読んでくれてありがとう。 –