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