城堡windsor注册开放仿制药

时间:2014-10-06 15:54:52

标签: c# castle-windsor

我正在尝试注册一些开放的泛型

如果我这样做就可以了

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的例子,它第一次没有问题。我必须在工作中研究我的实现,因为显然存在一些差异。

2 个答案:

答案 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

上的一个工作示例