如何使用Ioc结构映射石英

本文关键字:映射 石英 结构 Ioc 何使用 | 更新日期: 2023-09-27 17:52:46

我已经尝试使用当前的例子,但我得到错误:https://gist.github.com/mhenrixon/772643

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

错误:"带语句体的lambda表达式不能转换为表达式树"。

实际上我需要解决方案来使用IoC IJobFactory

如何使用Ioc结构映射石英

我使用这样的代码:

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

似乎在这种情况下,您只能在=> ("goes to")操作符的右侧使用简单的表达式(没有"语句体"-意味着花括号)- 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());