使用Castle Windsor,我想用一個類型參數來配置一個通用服務;並通過已知的具體類型來實現它,該類型實現了具有特定類型的服務作爲通用參數。表現爲一個單元測試,我想獲得以下工作:Castle Windsor:配置一個通用服務並提供非通用實現失敗
[TestClass]
public class WindsorTests
{
[TestMethod]
public void ResolveGenericEntity_Test()
{
WindsorContainer container = ConfigureContainer();
IEntity<string> entity = container.Resolve<IEntity<string>>();
Assert.IsNotNull(entity);
}
private WindsorContainer ConfigureContainer()
{
WindsorContainer container = new WindsorContainer();
container.AddComponent("entity", typeof(IEntity<>), typeof(ConcreteEntity));
return container;
}
}
public interface IEntity<T> { }
public class ConcreteEntity : IEntity<string> {}
此測試失敗,但以下情況除外:
System.InvalidOperationException: WindsorGenericsTest.ConcreteEntity是 不是GenericTypeDefinition 。 MakeGenericType只能在 上調用 Type.IsGenericTypeDefinition爲true的類型。
現在,我發現了一個描述相同問題的post here。海報描述瞭如何通過更改DefaultGenericHandler.ResolveCore方法來解決這個問題。但是,我不想更改自己的Castle代碼並在自定義版本上運行。
有沒有人知道如何解決這個問題,而無需修改Castle Windsor源代碼?如果這是需要的,我很樂意實施一個設施來支持這一點。
您鏈接到的帖子是錯誤的,它提出了一種解決方法,而不是修復。溫莎是對的,你的註冊是錯誤的。 – 2010-05-20 17:58:37