所以我有windsor設置和我的所有服務註冊。我有一個需要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獲得理想的工廠效果?或者這對溫莎來說甚至是可能的?我記得這與Ninject有關。
你不能得到IoC容器構建的東西不知道。它必須註冊。你爲什麼不註冊它?組件不需要單獨的界面進行註冊。 – Amy
認識到這與問題無關,但出於好奇,你爲什麼選擇Ninject? –
@ Dan-Cook自從我使用ninject以來已經有一段時間了,但windsor只是覺得更自然,而且設置基本上沒有任何努力。 – Sinaesthetic