【发布时间】:2017-09-29 14:32:04
【问题描述】:
我正在创建一个基于 ABP 的简单 ASP.NET 解决方案,作为该解决方案的一部分,我使用了一个标准的 Windows 服务,该服务应该执行小型后台操作(目前只有 ICMP ping,但后来可能更多)。
是否可以在此 Windows 服务中使用 ABP 应用程序服务(最好使用 IoC)?
感谢您的任何建议。
【问题讨论】:
标签: c# asp.net asp.net-boilerplate
我正在创建一个基于 ABP 的简单 ASP.NET 解决方案,作为该解决方案的一部分,我使用了一个标准的 Windows 服务,该服务应该执行小型后台操作(目前只有 ICMP ping,但后来可能更多)。
是否可以在此 Windows 服务中使用 ABP 应用程序服务(最好使用 IoC)?
感谢您的任何建议。
【问题讨论】:
标签: c# asp.net asp.net-boilerplate
当然,您可以在 Windows 服务项目中使用您的 AppServices。您还可以在 Windows 服务中编写后台作业。您需要从 Windows 服务中引用您的应用程序项目。因为每个项目都表现为模块。您的新 Windows 服务需要注册为模块。因此您可以使用依赖服务和其他有用的 ABP 库。
我将向您展示一些有关模块化的示例代码。但我建议您阅读模块文档:https://aspnetboilerplate.com/Pages/Documents/Module-System
MyWindowsServiceManagementModule.cs
[DependsOn(typeof(MySampleProjectApplicationModule))]
public class MyWindowsServiceManagementModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
}
MyWindowsServiceWinService.cs
public partial class MyWindowsServiceWinService : ServiceBase
{
private MyWindowsServiceManagementBootstrapper _bootstrapper;
public MyWindowsServiceWinService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
_bootstrapper = new MyWindowsServiceManagementBootstrapper();
_bootstrapper.Initialize();
}
catch (Exception ex)
{
//EventLog.WriteEntry("MyWindowsService can not be started. Exception message = " + ex.GetType().Name + ": " + ex.Message + " | " + ex.StackTrace, EventLogEntryType.Error);
}
}
protected override void OnStop()
{
try
{
_bootstrapper.Dispose();
}
catch (Exception ex)
{
//log...
}
}
}
MyWindowsServiceManagementBootstrapper.cs
public class MyWindowsServiceManagementBootstrapper : AbpBootstrapper
{
public override void Initialize()
{
base.Initialize();
}
public override void Dispose()
{
//release your resources...
base.Dispose();
}
}
Ps:当我在头顶写代码时,它可能会抛出错误,但基本上这应该可以指导你。
【讨论】:
var bootstrapper = AbpBootstrapper.Create<MySampleProjectApplicationModule>(); 然后 bootstrapper.Initialize(); 是这样吗?当我尝试此操作时,我收到以下错误消息:无法创建组件“Abp.BackgroundJobs.BackgroundJobStore”,因为它需要满足依赖项。 'Abp.BackgroundJobs.BackgroundJobStore' 正在等待以下依赖项: - 服务'Abp.Domain.Repositories.IRepository`2 有什么想法吗?你能用正确的方式更新你的答案吗?