¿Se puede deshabilitar el registro implícito de delegado de fábrica TypedFactoryFacility de Windsor?

Estamos usando Windsor'stipo de fábrica tipo y creo que es encantador. Usamos la fábricas basadas en interfaz. Sin embargo, nos gustaría deshabilitar algunos subconjuntos de fábricas basadas en delegados, específicamente el fábricas registradas implícitamente. Estos son contra-intuitivos, no porque sean delegados, sino porque están creados mágicamente y pueden retrasar la falla.

Si tenemos una clase que toma un delegado como dependencia

class X { public X(Func<int,IPrincipal> d); }

Y luego regístrelo en un contenedor que haya registrado la instalación de fábrica escrita.

container.Kernel.Register(Component.For<X>().ImplementedBy<X>())

Puedo resolverlo sin ningún problema, lo cual es contradictorio al principio, ya que nadie le dijo al contenedor que teníamos algo que decir sobreFunc<int,IPrincipal>.

var x = container.Resolve<X>();

Y no me encuentro con el fracaso hasta que intento utilizar esa fábrica creada implícitamente.

x.D(0); // no registration for IPrincipal

Aunque esto tiene sentido desde cierto punto de vista, el hecho de que esta fábrica esimplícitament creado es problemático. Es un comportamiento muy consciente de los contenedores. Las personas que escriben clases arbitrarias encontrarán útil parametrizar su comportamiento a través de delegados, y tan pronto como los coloquemos en el contenedor de IoC nos encontramos con este comportamiento sorprendente.

Dicho esto, hay una ingeniosa fábrica implícita que parece que vale la pena mantener. En este momento, Windsor creará una fábrica simple para dependencias de la formaFunc<T>, permitiendo al consumidor de la dependencia retrasar la creación real. Puede tener sentido en el marco 4.0 cambiar esto para reconocerLazy<T> como una clara indicación de que solo está retrasando la construcción deT, sin intentar acceder a una fábrica que implementará una política interesante.

¿Hay un interruptor inteligente disponible para configurar elTypedFactoryFacility ¿o necesitamos implementar algunos objetos nuevos para obtener el comportamiento que queremos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta