Вам необходимо зарегистрировать ваши виды моделей и видов в контейнере. Старая версия Windsor работала на основе атрибутов, но в последней версии вы можете сделать это с помощью свободно распространяемого API или даже массового регистра на основе некоторого соглашения:
public class Bootstrapper : Bootstrapper<IShellViewModel>
{
protected override IServiceLocator CreateContainer()
{
_container = new WindsorContainer();
var adapter = new WindsorAdapter(_container);
_container.Register(Component.For<ITool>().ImplementedBy<Tool>().LifeStyle.Transient);
return adapter;
}
}
Вы также можете создать Установщики, которые будут регистрировать типы в контейнере, чтобы ваш код Bootstrapper не заканчивался большим количеством регистрационного кода:
public class ShellRegistration : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<ITool>().ImplementedBy<Tool>().LifeStyle.Transient);
//Register other types
}
}
И назовите его в загрузчике:
public class Bootstrapper : Bootstrapper<IShellViewModel>
{
protected override IServiceLocator CreateContainer()
{
_container = new WindsorContainer();
var adapter = new WindsorAdapter(_container);
_container.Install(FromAssembly.This());
return adapter;
}
}
Посмотрите пример приложения Silverlight Я создал, чтобы узнать, как работать с Castle Windsor.
Вы можете получить экземпляры ваших зависимостей, используя Constructor Injection или Property Injection, что-то встроенное в это:
public class ShellViewModel
{
public ShellViewModel(IMyDependency dependency)
{
//you'll get an instance of the class implementing IMyDependency
//Logger property will be injected after construction
}
public ILog Logger
{
get; set;
}
}