所以我使用 Nancy + TinyIoC 来运行一个小型网络服务。这行得通。现在我需要创建一个 Quartz 作业,它需要一些相同的依赖项,理想情况下我想使用 Nancy 的 TinyIoC 来注入这些,如Quartz Tutorial中所述。
我发现了一个使用 Windsor 的示例,他们在其中直接访问 IoC 容器,但根据此处提出的类似问题,在 Nancy 看来,这是粗略且不必要的。
那么我的问题必须是,这样做的正确方法是什么?我的 JobFactory 的代码如下所示:
public class MyJobFactory : IJobFactory
{
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return (IJob) TinyIoCContainer.Current.Resolve(bundle.JobDetail.JobType);
}
}
但这不会返回具有正确注入实例的作业,而是返回具有依赖项的新实例的作业。(应该是单例,这让我相信 TinyIoCContainer.Current 返回的 TinyIoCContainer 与 Nancy 使用的容器不同)。
更新
我正在通过 Nancy Bootstrapper 设置 IoC 容器:
public class MyBootStrapper : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
var push = new PushService();
// object initialization and Event Registration snipped
container.Register(cp);
}
}