我正在创建一个基于 ABP 的简单 ASP.NET 解决方案,作为该解决方案的一部分,我使用了一个标准的 Windows 服务,该服务应该执行小型后台操作(目前只有 ICMP ping,但以后可能更多)。
是否可以在此 Windows 服务中使用 ABP 应用程序服务(最好使用 IoC)?
感谢您的任何建议。
我正在创建一个基于 ABP 的简单 ASP.NET 解决方案,作为该解决方案的一部分,我使用了一个标准的 Windows 服务,该服务应该执行小型后台操作(目前只有 ICMP ping,但以后可能更多)。
是否可以在此 Windows 服务中使用 ABP 应用程序服务(最好使用 IoC)?
感谢您的任何建议。
当然,您可以在 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:当我在头顶写代码时,它可能会抛出错误,但基本上这应该可以指导你。