簡體   English   中英

溫莎城堡注冊開放式仿制葯

[英]Castle windsor registering open generics

我正在嘗試注冊一些開放的仿制葯

如果我這樣做就行了

Component
    .For(typeof(IDtoFactory<>))
    .ImplementedBy(typeof(DtoFactoryBase<>))
    .LifestyleSingleton()

但是,如果我嘗試這樣注冊,將失敗

Classes
    .FromThisAssembly()
    .BasedOn(typeof(IDtoFactory<>))
    .WithServiceAllInterfaces()
    .LifestyleSingleton()

我真的不介意必須有一個抽象的基類來完成這項工作,但是還是有點痛苦,因為我對只實現該接口的所有工廠感到滿意。

我收到如下錯誤

Service 'MyProj.Factories.IDtoFactory`1
[[MyProject.Models.MemberDto, 
  MyProject, 
  Version=2.0.0.1, 
  Culture=neutral, 
  PublicKeyToken=null]]' which was not registered.

我正在使用最新版本的溫莎城堡〜3.3

我為開放式通用Classes注冊時做錯什么了嗎?


所以這真令人沮喪

我去建立一個示例,說明它在這里不起作用,並且第一次成功就沒有問題。 我必須在工作中研究自己的實現,因為顯然存在一些差異。

是否有可能錯誤不是與IDtoFactory本身的注冊有關,而是與它與您的Dto的連接有關? 您可以粘貼更多代碼嗎? 為了查看實際發生的情況,從屬性中公開您的容器(出於測試目的),並查看組件注冊。 您將清楚地看到是否存在任何配置錯誤的組件-容器本身中就有這樣的屬性。

我在這里發現了我的問題。 在生產環境中,我在其他安裝程序中具有以下功能

 Classes
    .FromThisAssembly()
    .Where(type => 
        type.Name.EndsWith("Wrapper") || 
        type.Name.EndsWith("Provider") ||
        type.Name.EndsWith("Factory") ||
        type.Name.EndsWith("Reader") ||
        type.Name.EndsWith("Writer") ||
        type.Name.EndsWith("Destroyer") ||
        type.Name.EndsWith("Helper")
    )
    .WithService
    .DefaultInterfaces()
    .Configure(c => c.LifeStyle.Is(scope))

這搞砸了我的其他安裝程序。 一旦我將其刪除並用更明確的內容替換了注冊,一切便開始正常工作

這是github上的工作示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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