0

我曾尝试使用当前的例子,但我得到的错误: https://gist.github.com/mhenrixon/772643如何使用Ioc结构图来处理石英?

ForSingletonOf<IScheduler>().Use(ctx => 
     { 
      var scheduler = ctx.GetInstance<ISchedulerFactory>().GetScheduler(); 
      scheduler.JobFactory = ctx.GetInstance<IJobFactory>(); 
      return scheduler; 
     }); 

的错误:“与语句体lambda表达式不能转换为表达式树”。

其实我需要一个使用IoC解决方案IJobFactory

回答

0

看来,在这种情况下,你只能使用简单的表达式(没有“语句的身体” - 这意味着大括号)的=右边> (“去”)运算符 - lambda表达式可能需要转换为表达式树。

你可以换所有的工厂模式(在那些已经存在的工厂接口的顶部... factorception)内:

public interface ICustomSchedulerFactory 
{ 
    Scheduler Create(); 
} 

public class CustomSchedulerFactory: ICustomSchedulerFactory 
{ 
    private readonly IContainer _container; 
    public CustomSchedulerFactory(IContainer container) 
    { 
     _container = container; 
    } 

    public Scheduler Create() 
    { 
     var scheduler = _container.GetInstance<ISchedulerFactory>().GetScheduler(); 
     scheduler.JobFactory = _container.GetInstance<IJobFactory>(); 
     return scheduler; 
    } 
} 

(或简单地注入所需的依赖,而不是容器) 和然后只需

ForSingletonOf<IScheduler>().Use(ctx => ctx.GetInstance<ICustomSchedulerFactory>().Create()); 
0

我用的是这样的:

 ForSingletonOf<IScheduler>().Use("A description",ctx => 
     { 
      var scheduler = ctx.GetInstance<ISchedulerFactory>().GetScheduler(); 
      scheduler.JobFactory = ctx.GetInstance<IJobFactory>(); 
      return scheduler; 
     });