我正在尝试注册一些开放的泛型
如果我这样做就可以了
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.
我正在使用最新版本的Castle Windsor~3.3
我的Classes
注册开放式通用版我做错了吗?
所以这令人非常沮丧
我去构建一个it not working here的例子,它第一次没有问题。我必须在工作中研究我的实现,因为显然存在一些差异。
答案 0 :(得分:0)
错误不是IDtoFactory本身的注册错误,而是它和你的Dto之间的连接吗?你可以粘贴更多代码吗?为了查看实际上从属性公开容器的内容(为了测试)并查看组件注册。您将清楚地看到是否存在任何配置错误的组件 - 容器本身中存在此类属性。
答案 1 :(得分:0)
我在这里发现了我的问题。在我的生产环境中,我在不同的安装程序中有以下内容
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
上的一个工作示例