【问题标题】:Type not resolving in multiple factories类型不在多个工厂中解析
【发布时间】:2016-12-15 13:19:37
【问题描述】:

我有以下课程

public class NightlyJob : IScheduleJob, IRecurringJob

对于这两个接口,我都有这样的简单类型工厂:

public interface IScheduleJobFactory
{
    IEnumerable<IScheduleJob> Create();
}

没有从两个工厂的 .Create() 方法中检索到提到的类。似乎只能从一个工厂中检索到该类,具体取决于首先编写签名中的哪个接口。

我的问题是有没有办法解决这个问题?

【问题讨论】:

  • 为什么需要工厂?他们是code smells
  • Castle 的类型化工厂似乎是最简单的方法。我需要做的就是获取一个接口的实现并选择一个具有匹配属性的接口。
  • 为什么不将IEnumerable&lt;IScheduleJob&gt; 注入您的消费者?
  • 我不知道该怎么做。
  • 所以您的实际问题是:“如何注册 IScheduleJob 实例的集合?”?

标签: c# castle-windsor factory ioc-container


【解决方案1】:

在 Steven 在 cmets 中建议的方向进行了一些搜索之后。我发现我的解决方案是将IEnumerable&lt;IScheduleJob&gt;IEnumerable&lt;IRecurringJob&gt; 直接注入消费者。这些通过使用 Castle 的 CollectionResolver 解析为实现集合,如下所示:

container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
        container.Register(
            Classes.FromAssemblyInDirectory(new AssemblyFilter("."))
                .BasedOn(typeof(IScheduleJob)).
                WithServiceAllInterfaces()
        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多