В настоящее время я регистрирую кучу вещей в одной точке моей последовательности инициализации
Container.Register(AllTypes.FromAssemblyContaining<MyAssembly>()
.BasedOn(typeof(IRepository<>))
.WithService.Self().Configure(c => c.LifeStyle.Transient));
Я использую WithService.Self, чтобы он автоматически не принимал AllInterfaces, чтобы интерфейскоторый я захочу добавить позже, так как переадресация типов еще не была добавлена.
Я бы хотел потом (позже), чтобы иметь возможность добавить переадресацию типов к одному из уже зарегистрированных компонентов, иIntellisense для свойства ForwardedTypes предлагает использовать .Forward (typof ()), например,
Container.Register(Component.For<IOtherInterface>()
.Forward(typeof(IOtherInterface))
.ImplementedBy<AlreadyRegisteredType>().LifeStyle.Transient);
Возможно ли это?
РЕДАКТИРОВАТЬ:
Я пытался получитьМатериал, который Кшиштоф предложил поработать, поэтому я создал тестовый проект (ниже).Я пробовал различные комбинации, чтобы заставить ConfigureFor пересылать IMyInterface в MySecondType, но просто не могу заставить его работать, когда это делается в качестве второго шага после начальной регистрации типов моих компонентов.Я, вероятно, неясен, но я просто не понимаю, как работает команда ConfigureFor, и документация немного отрывочна (не существует) по этому вопросу.
namespace TestProject1
{
public class MyType : IMyInterface
{
public virtual string MyProperty { get; set; }
}
public class MySecondType : IMyInterface
{
public virtual string MySecondProperty { get; set; }
}
public interface IMyInterface
{
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
//New Container
var container = new WindsorContainer();
//Register Types
container.Register(
AllTypes.FromAssemblyContaining<MyType>().BasedOn<IMyInterface>().WithService.Self().Configure(
c => c.LifeStyle.Transient));
//Other stuff happens here...
//Now Register our interface as a forward
container.Register(AllTypes.FromAssemblyContaining<IMyInterface>()
.BasedOn<IMyInterface>()
.WithService.Base()
.ConfigureFor<IMyInterface>(r => r.Forward<MySecondType>()).Configure(c => c.LifeStyle.Transient));
var typeA = new MySecondType();
var typeB = container.Resolve<IMyInterface>();
Assert.IsInstanceOfType(typeB.GetType(), typeA.GetType());
}
}
}