簡體   English   中英

無法按照慣例注冊Castle Windsor組件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM