使用Nancy + TinyIoC通过Quartz JobFactory注入依赖项

Mik*_*kke 2 .net quartz.net nancy tinyioc

所以我使用Nancy + TinyIoC来运行一个小型的Web服务.这有效.现在我需要创建一个需要一些相同依赖关系的Quartz作业,理想情况下我想使用Nancy的TinyIoC注入这些,如Quartz Tutorial中所述.

我已经找到了一个使用Windsor的例子,他们直接访问了IoC Container,但是根据这里提出的类似问题,南希显然是粗暴的,不必要的.

那么我的问题就是,这样做的正确方法是什么?我的JobFactory的代码如下所示:

public class MyJobFactory : IJobFactory
{
    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        return (IJob) TinyIoCContainer.Current.Resolve(bundle.JobDetail.JobType);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这不会返回正确注入实例的作业,而是返回具有新依赖项实例的作业.(这应该是Singletons,这让我相信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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ins 5

让我相信TinyIoCContainer.Current返回的TinyIoCContainer与Nancy使用的容器不同.

得到它在一个:-) .Current是一个静态实例,是我们或许应该从tinyioc.cs文件的南希版本删除 - 这不是同一个实例引导程序使用的一个.

如果您绝对必须使用服务位置,并且您无法使用构造函数注入,则可以在引导程序中覆盖GetApplicationContainer方法并返回.Current实例,以便Nancy将使用它.我们默认不使用它,因为它不是我们推荐的