Esta es una vieja pregunta, pero Google me guió aquí recientemente, así que pensé que iba a compartir mi solución para que no ayudara a alguien que buscara algo como el método BuildUp de StructureMap para Windsor.
Me pareció que podía agregar esta funcionalidad yo mismo con relativa facilidad. Aquí hay un ejemplo que simplemente inyecta dependencias en un objeto donde encuentra una propiedad nula Tipo de interfaz. Se podría extender el concepto más lejos, por supuesto, para buscar un atributo particular etc:
public static void InjectDependencies(this object obj, IWindsorContainer container)
{
var type = obj.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
if (property.PropertyType.IsInterface)
{
var propertyValue = property.GetValue(obj, null);
if (propertyValue == null)
{
var resolvedDependency = container.Resolve(property.PropertyType);
property.SetValue(obj, resolvedDependency, null);
}
}
}
}
Aquí es una prueba de unidad simple para este método:
[TestFixture]
public class WindsorContainerExtensionsTests
{
[Test]
public void InjectDependencies_ShouldPopulateInterfacePropertyOnObject_GivenTheInterfaceIsRegisteredWithTheContainer()
{
var container = new WindsorContainer();
container.Register(Component.For<IService>().ImplementedBy<ServiceImpl>());
var objectWithDependencies = new SimpleClass();
objectWithDependencies.InjectDependencies(container);
Assert.That(objectWithDependencies.Dependency, Is.InstanceOf<ServiceImpl>());
}
public class SimpleClass
{
public IService Dependency { get; protected set; }
}
public interface IService
{
}
public class ServiceImpl : IService
{
}
}
duplicado: http://stackoverflow.com/questions/447193 –
No es un duplicado de esa pregunta. La pregunta a la que se hace referencia pregunta si windsor puede resolver objetos que no están registrados. – PhilHoy