如何使用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
我使用这样的代码:
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());