使用 Quartz.NET 和简单注入器进行构造函数注入

2023-12-26

目前我正在使用 Quartz.NET 编写一个服务来安排它的运行。

我想知道是否有人有使用 Quartz.NET 和简单注入器进行构造函数注入的经验。

以下基本上是我希望实现的目标

public class JobImplementation: IJob
{
    private readonly IInjectedClass injectedClass;

    public JobImplementation(IInjectedClass _injectedClass)
    {
         injectedClass = _injectedClass
    }

    public void Execute(IJobExecutionContext _context)
    {
        //Job code
    }

根据这篇博文 http://blog.goyello.com/2009/09/21/how-to-use-quartz-net-in-pro-way/,你需要实现一个自定义IJobFactory, 像这样:

public class SimpleInjectorJobFactory : IJobFactory
{
    private readonly Container container;
    private readonly Dictionary<Type, InstanceProducer> jobProducers;

    public SimpleInjectorJobFactory(
        Container container, params Assembly[] assemblies)
    {
        this.container = container;

        // By creating producers, jobs can be decorated.
        var transient = Lifestyle.Transient;
        this.jobProducers =
            container.GetTypesToRegister(typeof(IJob), assemblies).ToDictionary(
                type => type,
                type => transient.CreateProducer(typeof(IJob), type, container));
    }

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler _)
    {
        var jobProducer = this.jobProducers[bundle.JobDetail.JobType];
        return new AsyncScopedJobDecorator(
            this.container, () => (IJob)jobProducer.GetInstance());
    }

    public void ReturnJob(IJob job)
    {
        // This will be handled automatically by Simple Injector
    }

    private sealed class AsyncScopedJobDecorator : IJob
    {
        private readonly Container container;
        private readonly Func<IJob> decorateeFactory;

        public AsyncScopedJobDecorator(
            Container container, Func<IJob> decorateeFactory)
        {
            this.container = container;
            this.decorateeFactory = decorateeFactory;
        }

        public async Task Execute(IJobExecutionContext context)
        {
            using (AsyncScopedLifestyle.BeginScope(this.container))
            {
                var job = this.decorateeFactory();
                await job.Execute(context);
            }
        }
    }
}

此外,您还需要进行以下注册:

var container = new Container();

container.Options.ScopedLifestyle = new AsyncScopedLifestyle();

var factory = new StdSchedulerFactory();

IScheduler scheduler = await factory.GetScheduler();

scheduler.JobFactory = new SimpleInjectorJobFactory(
    container, 
    Assembly.GetExecutingAssembly()); // assemblies that contain jobs

// Optional: register some decorators
container.RegisterDecorator(typeof(IJob), typeof(LoggingJobDecorator));

container.Verify();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Quartz.NET 和简单注入器进行构造函数注入 的相关文章

  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 如何正确使用memcpy?

    我有一个mainbuf bufsize 最初为空 我正在阅读一些输入 read fd otherbuf sizeof otherbuf 分配给不同的字符串otherbuf 每次我分配一个新字符串给otherbuf我想将其附加到mainbuf
  • GCM 推送通知导致 502 Bad Gateway

    我有一个 Net Windows 服务 通过以下方式发送 GCM 推送通知https android googleapis com gcm send https android googleapis com gcm send 该服务以 10
  • 如何在 Multiline 属性设置为 true 的文本框中将空格替换为换行符?

    假设我有这个字符串 string str The quick brown fox jumps over the lazy dog 如何替换或忽略字符串中的空格并在多行文本框中输入每个单词 预期输出 The quick brown fox j
  • 在 C 中使用模板函数的最短示例?

    我如何处理函数echo tpl可以采取1类型参数int or string 然后打印出来 C没有模板 我认为你能做的最好的事情就是使用联合或让函数具有不同的名称 后一种具有不同名称的方法是准标准方法 例如fabs fabsf fabsl a
  • 使用 C# 将文件列表从 ftp 下载到本地文件夹? [复制]

    这个问题在这里已经有答案了 我希望将 ftp 中的所有文件下载到本地文件夹 下载到本地驱动器后 所有文件都应在 ftp 中删除 从下面的代码 我只能从 ftp 下载一个我不期望的文件 我需要将所有文件放在一个文件夹中 但不放在本地文件名的名
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • 如何为 IAsyncOperation 指定回调方法

    是否可以指定一个方法完成后调用async手术 平台 C Windows Phone 8 我需要实现非阻塞方法来异步发送UDP数据包 他们有我的方法 onWriteComplete int errorCode 操作完成时回调 这是我尝试过的
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 使用 C# winforms 与 Windows 中的其他桌面应用程序交互

    我想知道是否可以与使用我的程序的其他程序进行交互 例如 单击另一个程序上的按钮等 我不确定这是否可能 但如果可能的话 有人可以提供一些 C 示例代码 Thanks 您可以创建消息并将其发送到其他进程 为此 您必须在 C 代码中使用 P In
  • 使用二维动态数组编写一个类

    我有一个家庭作业 我并不是在寻找任何人为我做这项工作 我只是在一个小方面遇到了麻烦 尽管我也接受其他方面的建议 任务是 使用二维动态数组编写一个类 构造函数传入数组的维度 构造函数还将动态数组中的所有值初始化为行索引乘以列索引 交换二维数组
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • 当调试器退出且没有调用堆栈时,用于跟踪 C# 崩溃的工具?

    我有一个大型 复杂的 C GUI 应用程序 它以完全可重现的方式崩溃 但我无法轻松诊断崩溃的原因 因为调试会话不是以通常的方式使用调用堆栈破坏调试器 而是完全退出 唯一的提示是输出窗口末尾有一条消息 STATUS STACK BUFFER
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • 如何隐藏鼠标光标?

    我想问是否有人可以为我提供一个 C 代码 在其中我可以在按下特定键时隐藏 显示鼠标指针 我发现一些只为 TURBO C 编写的代码 它们都不能使用 dev c 甚至 Visual c 编译和运行 我尝试运行在 Dev C 中找到的代码 但我
  • 如何在C++中动态调用函数

    除了 boost Bind Function 之外 我如何在 C 中动态调用函数 PHP has obj new MyObject function doSomething obj gt function Objective C 有 MyO
  • 着色器可以旋转形状以面向相机吗?

    我制作了一个球出现在 3D 空间中的场景 三角球耗费大量资源 所以我使用带有球纹理的二维表面 四边形 来完成此操作 但现在我需要在每次相机移动时调整形状的方向 我使用位置变换和 LookAt 方法来完成此操作 问题是我可以优化这个吗 如果可
  • 在 Outlook 中检索当前电子邮件正文

    在我的 Outlook 插件中 我想在功能区上添加一个按钮 因此当用户单击此按钮时 我想检索当前选定的电子邮件的正文 我有此代码 但它只检索收件箱中的第一封电子邮件 因为索引为 1 Microsoft Office Interop Outl
  • 用于 DSP 的快速 2D 卷积

    我想实现一些图像处理算法 这些算法旨在运行在小猎犬板 http en wikipedia org wiki Beagle Board 这些算法广泛使用卷积 我正在尝试为 2D 卷积找到一个好的 C 实现 可能使用快速傅里叶变换 我还希望该算
  • 将用户控件绑定到 bool 属性的相反值

    非常简单 我想做同样的事情this https stackoverflow com questions 534575 how do i invert booleantovisibilityconverter但在winforms中 谷歌似乎提

随机推荐

  • 由于长数据类型导致的 VBA-Excel 溢出错误

    这似乎太容易了 但我是如此绝望 我需要做的是得到最后的值列 D 的 数量大 前任 987654321 如果值只有两位数 则代码没问题 我只是无法识别问题所在 Dim lastRow As Long lastRow Cells Rows Co
  • PostgreSQL:如何使用generate_series()找出列中缺失的数字?

    SELECT commandid FROM results WHERE NOT EXISTS SELECT FROM generate series 0 119999 WHERE generate series results comman
  • 如何仅将一个窗口保留在我的应用程序中的所有其他窗口之上?

    我想在我的 C Windows 窗体应用程序中显示一个状态窗口 在应用程序等待获取锁时通知用户 这是应用程序定义的事情 但是 该窗口应该是可见的 并且始终保持在应用程序的所有其他窗口之上 即使用户单击另一个窗口 例如其后面的较大主窗口 也是
  • 如何使用 css 通过 href #id 隐藏锚标记

    我有不同的带有 href ids 的锚标记 我需要使用通用的 css 规则来隐藏它们 Content xxxxxxxxx a href tab1 Table 1 a Content xxxxxxxxxxxx a href tab2 Tabl
  • 编码风格:锁定/解锁内部还是外部?

    另一个可能愚蠢的问题 并发应该如何锁定 执行者或调用者应该负责锁定线程吗 例如没有特定的语言 Caller callAnotherThread executor method Executor method lock doSomething
  • Apache http 服务器问题

    我正在使用 Apache 版本 2 2 20 ubuntu 并尝试使用自定义 httpd conf 设置 但是我收到以下错误消息 并且希望能够为我提供任何指导 我是开发团队的一员 并获得了这个自定义的 httpd conf 文件 因此我并不
  • 捆绑与捆绑器/捆绑与捆绑安装

    两者有什么区别bundle bundler命令 有什么区别bundle bundle install 如果没有差异 为什么有多个命令做同样的事情 可执行文件因此可以互换使用 您可以在bundler exe https github com
  • 使用 Log4Net.ErrorFormat 如何记录堆栈跟踪? [复制]

    这个问题在这里已经有答案了 我想使用错误格式方法 因为它更容易阅读 更安全 更快 但我也想记录异常堆栈跟踪 I tried log ErrorFormat My 0 message pretty exception 但它只记录 我漂亮的消息
  • 如何设置 Doxygen 的输入目录?

    我有一个保存所有源文件和头文件的目录 我想运行 Doxygen 来生成这些源代码的文档 但是 我不想更改此目录中的任何内容 特别是我无法添加保存 Doxygen 文档的子目录 我怎样才能实现我所需要的 我想我需要做以下事情 我创建并转到 文
  • 获取长路径名上的文件夹 NTFS ACL

    我有一个 PS 脚本 如果分配了单个用户 它将返回 NTFS ACL 该脚本运行良好 直到我遇到超过 260 个字符的路径 我发现了很多关于路径太长问题的信息和一些解决方法 但我正在努力将解决方案集成到我的脚本中 有什么建议么 Thanks
  • 在 XAML 自动生成的文件中强制执行全局命名空间

    我的问题与其他问题不同在 XAML 中强制执行全局命名空间 https stackoverflow com questions 30607193 enforce global namespace in xaml因为我没有与封闭名称空间同名的
  • 如何在控制台应用程序中绘制矩形?

    我需要在 C 控制台应用程序中并使用扩展 ASCII 绘制一个矩形 内部有一个数字 我该怎么办 这是一个演示 public class ConsoleRectangle private int hWidth private int hHei
  • 在应用程序终止时,WCF 中 IsOneWay=true 的方法会发生什么情况

    我有一个客户端应用程序 它偶尔会通知其服务进度 对服务的方法调用标记为 IsOneWay true 因为通知不需要任何返回值 而且我不想延迟 客户端可能会向服务发出错误通知 然后终止 问题是 单向方法调用在发送消息后是否返回调用者代码 或者
  • 文件的安全流更新

    我们通过将新记录写入临时文件 然后用临时文件替换旧文件来执行大型文本文件的更新 一个严重缩写的版本 var tpath Path GetTempFileName try using var sf new StreamReader sourc
  • Flask应用程序目录和权限的设置?

    我在 ubuntu 服务器上构建了一个简单的 Flask 应用程序 并将代码放在以下目录中 主应用程序代码 home user flask app WSGI 配置 www flask app app wsgi 我的问题是 在生产中 将应用程
  • 从强名称文件中提取私钥?

    正如标题所述 有谁知道如何从 snk 文件中提取私钥 我们希望使用 StrongName 的私钥来进行加密 我读到 http msdn microsoft com en us library k5b5tt23 VS 80 aspx http
  • 如何正确删除C++中链表的节点

    我感觉好像我实际上并没有删除节点并释放内存 我想我只是移动指针 所以当我打印链接列表时 列表不会打印我删除的元素 所以我的问题是我实际上是删除节点还是只是简单地重新排列指针 这样看起来我正在删除节点 本质上只是破坏链接但不删除节点 感谢您的
  • 如何在Spring Security上针对不同的请求路径使用不同的过滤器?

    我有两个过滤器 我想对 relatorios 应用一个 对其余的应用另一个 怎么做 这是我的 不起作用 版本 Override protected void configure HttpSecurity httpSecurity throw
  • 如何在没有互联网连接的情况下通过本地网络进行 WebRTC?

    我想让两台不同的计算机打开一个静态 html 页面 并且能够通过局域网上的 WebRTC 相互通信 在这种情况下 没有与外界的互联网连接 其中一台电脑可以手动输入另一台电脑的 IP 地址 并使用该硬编码的 IP 进行连接 ICE服务器有必要
  • 使用 Quartz.NET 和简单注入器进行构造函数注入

    目前我正在使用 Quartz NET 编写一个服务来安排它的运行 我想知道是否有人有使用 Quartz NET 和简单注入器进行构造函数注入的经验 以下基本上是我希望实现的目标 public class JobImplementation