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