Pregunta

Por lo que he leído sobre Windsor/Microkernel, en teoría es posible hacer todo lo que puedes hacer usando archivos xml con código.De hecho, y corríjanme si me equivoco, parece que la principal contribución de la capa Windsor es agregar configuración xml para cosas que Microkernel ya puede hacer.

Sin embargo, últimamente he tenido dificultades para descubrir cómo implementar algunas funciones un poco más complicadas en el código (es decir, cómo asignar un valor de argumento de constructor predeterminado).Ahora, mientras voy a usar xml en mi versión de producción, estoy registrando componentes en el código para mis pruebas y esto se está volviendo bastante problemático.A esto no ayuda el desafortunado estado de su documentación y el hecho de que los únicos artículos que puedo encontrar se centran en el registro xml.

¿Alguien conoce una fuente que enumere cómo registrar cosas en código (preferiblemente con el equivalente xml)?Dejando al descubierto la existencia de eso, ¿alguien simplemente conoce un proyecto de código abierto/muestra donde hay un uso significativo no xml de Castle Windsor/Microkernel?

¿Fue útil?

Solución

Siempre he encontrado que mirar la prueba unitaria es la mejor manera de aprender a usar un proyecto de código abierto.Castle tiene una interfaz fluida que te permitirá hacer todo en código.Desde el Pruebas de WindsorDotNet2 caso de prueba:

[Test]
    public void ParentResolverIntercetorShouldNotAffectGenericComponentInterceptor()
    {
        WindsorContainer container = new WindsorContainer();
        container.AddComponent<MyInterceptor>();

        container.Register(
            Component.For<ISpecification>()
                .ImplementedBy<MySpecification>()
                .Interceptors(new InterceptorReference(typeof(MyInterceptor)))
                .Anywhere
            );
        container.AddComponent("repos", typeof(IRepository<>), typeof(TransientRepository<>));

        ISpecification specification = container.Resolve<ISpecification>();
        bool isProxy = specification.Repository.GetType().FullName.Contains("Proxy");
        Assert.IsFalse(isProxy);
    }

Y para obtener más información, consulte el Caso de prueba de registro de componentes y Todos los tipos de casos de prueba

También hay un DSL para hacerlo, esta es mi opción preferida, ya que realmente simplifica las cosas y ofrece mucha extensibilidad sencilla.El DSL se llama Binsor, sobre el cual puedes leer más aquí: http://www.ayende.com/Blog/archive/7268.aspx Pero nuevamente, el mejor lugar para la información son las Pruebas Unitarias.Este es un ejemplo de código de lo que es posible con binsor:

for type in AllTypesBased of IController("Company.Web.Controller"):
    component type

Esas dos líneas registrarán cualquier tipo que herede la interfaz IController en el contenedor: D

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top