2016-12-15 39 views
0

我有以下类键入多个工厂没有解决

public class NightlyJob : IScheduleJob, IRecurringJob 

两个接口我有简单的类型化的工厂是这样的:

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

提到类不是从两个工厂的检索。 Create()方法。看起来,只能从一个工厂中检索该类,具体取决于签名中的哪个接口先写入。

我的问题是如果有解决方法?

+0

为什么你需要一个工厂:这是通过使用城堡的CollectionResolver这样解析为实现集合?它们是[代码味道](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=100)。 – Steven

+0

城堡类型的工厂似乎是一个最简单的方法。我需要做的就是获得一个接口的实现,并选择一个具有匹配属性的接口。 – zmaten

+0

为什么不将'IEnumerable '注入到你的消费者? – Steven

回答

0

经过一些在Steven建议的方向搜索评论。我发现我的解决方案是直接向消费​​者注入IEnumerable<IScheduleJob>IEnumerable<IRecurringJob>

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