我正在开发一个Windows服务执行一些定期操作,我能否使用Unity注入来自另一个库的类?
我想在我的服务中使用[Dependency]属性,在Windows服务启动入口注册组件。
示例:
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
UnityConfig.RegisterComponents();
ServicesToRun = new ServiceBase[]
{
new EventChecker()
};
ServiceBase.Run(ServicesToRun);
}
}
public static class UnityConfig
{
public static void RegisterComponents()
{
UnityContainer container = new UnityContainer();
container.RegisterType<IEventBL, EventBL>();
}
}
public partial class EventChecker : ServiceBase
{
private Logger LOG = LogManager.GetCurrentClassLogger();
[Dependency]
public Lazy<IEventBL> EventBL { get; set; }
protected override void OnStart(string[] args)
{
var events = EventBL.Value.PendingExecution(1);
}
}
在这种情况下,EventBL始终为空,因此不会被unity的[Dependency]解析。有没有办法让它工作?谢谢!
找到解决方案:
在写出答案后,我发现调用容器的build up方法来创建服务类可以起作用:
UnityContainer container = new UnityContainer();
UnityConfig.RegisterComponents(container);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
container.BuildUp(new EventChecker())
};
ServiceBase.Run(ServicesToRun);
如果您知道其他的解决方案,请分享它 :)
如果您知道其他的解决方案,请分享它 :)