【发布时间】:2016-08-30 05:55:58
【问题描述】:
我有一个使用顶层架子的 Windows 服务,并且在我拥有的服务的主要方法中,
static void Main(string[] args)
{
//TopShelf
if (args != null && args.Length > 0)
{
var host = HostFactory.New(
x =>
{
x.Service<MyWindowsSvcHost>(
s =>
{
s.ConstructUsing(name => new MyWindowsSvcHost());
s.WhenStarted(tc => tc.Start(null));
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("SomeServiceName");
x.SetDisplayName("SomeServiceName");
x.SetServiceName("SomeServiceName");
});
host.Run();
Environment.ExitCode = 0;
}
else
{
ServiceBase[] ServicesToRun = new ServiceBase[] { new MyWindowsSvcHost() };
ServiceBase.Run(ServicesToRun);
}
}
我正在使用 spring 注入该服务的静态属性。在 MyWindowsSvcHost 中,我有一个静态属性 myStaticProperty,我想将其加载到其中。以下是我的服务 app.config 的样子
<object id="SomeName" singleton="false" type="MyWindowsSvcHostAssembly.MyWindowsSvcHost, MyWindowsSvcHostAssembly">
<property name="MyStaticProperty" ref="myStaticObject" />
</object>
<object id="myStaticObject" singleton="true" type="SomeAssembly.MyStaticClass, SomeAssembly">
</object>
在服务内部,我拥有属性
public static SomeClass MyStaticProperty { get;放; }
但这始终为空。如果我将下面的单例更改为 true 并对其进行调试,它总是被正确分配并且一切正常。
<object id="SomeName" singleton="true" type="MyWindowsSvcHostAssembly.MyWindowsSvcHost, MyWindowsSvcHostAssembly">
<property name="MyStaticProperty" ref="myStaticObject" />
</object>
知道这里的幕后发生了什么吗?
【问题讨论】:
标签: c# .net code-injection spring.net