Итак, у меня установлен виндзор и все мои услуги зарегистрированы. У меня есть класс, который требует этих сервисов в ctor, но этот класс не зарегистрирован в Windsor, так как у него нет интерфейса, и я не хочу его использовать ради разрешения зависимостей. Я действительно заинтересован в том, что решение Windsor разрешено и внедряет мои зарегистрированные зависимости и отсылает обратно инициализированный класс - в основном завод.Как я могу использовать windsor, чтобы дать мне экземпляр объекта, который не зарегистрирован?
Проблема, что я бегу в том, что Виндзорский бросает, потому что зависимый класс не был зарегистрирован:
void Main()
{
var container = new WindsorContainer();
container.Register(Component
.For<ITestInterface>()
.ImplementedBy<TestImpl>()
.LifestyleTransient());
var c = container.Resolve<TestClass>(); // throws because TestClass isn't registered
c.Run();
}
public class TestClass
{
private ITestInterface _d;
public TestClass(ITestInterface d)
{
_d = d;
}
public void Run()
{
_d.Do();
}
}
public interface ITestInterface
{
void Do();
}
public class TestImpl : ITestInterface
{
public void Do()
{
Console.WriteLine("done");
}
}
То, что я не хочу, чтобы в конечном итоге делает, что-то вроде этого:
var dependency1 = container.Resolve<ITestInterface>();
var c = new TestClass(dependency1);
c.Run();
Потому что теперь мы находимся на территории локатора обслуживания. Но что более важно, классы, которые имеют несколько зависимостей ... ну, что может стать утомительным.
Как я могу заставить Windsor получить желаемый заводской эффект? Или это возможно даже с Виндзором? Я помню, что это было связано с Ниндектом.
Вы не можете получить контейнер IoC, чтобы построить что-то он не знает. Он должен быть зарегистрирован. Почему бы вам не зарегистрировать его? Компонентам не требуется отдельный интерфейс для регистрации. – Amy
Поймите, что это не относится к вопросу, но из любопытства, почему вы выбрали это по Ninject? –
@ Dan-Cook это было некоторое время с тех пор, как я использовал ninject, но Windsor просто чувствовал себя более естественным, и настроение вообще не приносило никаких усилий. – Sinaesthetic