[英]Can't register Castle Windsor components by convention
我似乎無法按照慣例注冊我的Castle Windsor對象,我真的很茫然。 情況是我有兩個項目,網站(一個非常基本的Web表單項目)和BusinessObjects(一個類庫)。 我正在嘗試使用IoC來保持我的所有業務對象實現內部,並且只處理Website項目中的接口。
我發現完成此任務的最佳方法是使用安裝程序。 所以,在我的Global.asax.cs中我有這個:
private IWindsorContainer _container;
public override void Init()
{
base.Init();
InitializeIoC();
Global.WindsorContainer = _container;
}
private void InitializeIoC()
{
_container = new WindsorContainer();
_container.Install(new BusinessObjectsInstaller());
}
public static IWindsorContainer WindsorContainer { get; private set; }
這似乎工作正常,並從容器中拉出一個對象,我只是使用一個非常簡單:
var thingey = Global.WindsorContainer.Resolve<IThingey>();
然后在我的BusinessObjects項目中,我有這個:
public class BusinessObjectsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IThingey>().ImplementedBy<Thingey>());
}
}
現在,在這一點上,一切都按照我的預期運作。 這不是優雅或任何東西,但我仍然試圖解決這個問題。 所以我在這一點上要做的重要事情是以更有用的方式連接這些對象,這導致我用這個替換上面的組件注冊:
container.Register(Classes
.FromThisAssembly()
.BasedOn<IThingey>()
.LifestyleTransient()
);
哪個我絕對不能上班。 我得到的只是
找不到用於支持服務BusinessObjects.Contracts.IThingey的組件
最終,類注冊將更改為其他接口繼承的另一個接口,但一次只能一步。
任何有關正在發生的事情/我做錯了什么的幫助都將不勝感激。
您沒有指定由您的類注冊的任何服務,因此默認情況下,這些類被注冊為自己的服務。 從文檔:
您必須指定組件注冊的服務; 您可以使用WithService
屬性或快捷方式( WithServiceBase()
, WithServiceDefaultInterfaces()
等)來實現。 鏈接的資源包含您可以使用的不同選擇方法:
Krzysztof Kozmic建議您使用Base服務注冊組件,您可以這樣做:
container.Register(Classes
.FromThisAssembly()
.BasedOn<IThingey>()
.WithServiceBase()
.LifestyleTransient()
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.