2016-08-29 5 views
0

私は、このサービスの静的プロパティに注入するために、スプリングを使用していますSpring.Netはインスタンス化された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); 
      } 
     } 

、一番上の棚を使用して、私が持っているサービスの主な方法でWindowsサービスを持っています。 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工ass MyStaticPropertyを{取得持っているかです。セット; }

これは常にnullです。シングルトンをtrueに変更してデバッグすると、常に正しく割り当てられ、すべてが機能します。

<object id="SomeName" singleton="true" type="MyWindowsSvcHostAssembly.MyWindowsSvcHost, MyWindowsSvcHostAssembly"> 
      <property name="MyStaticProperty" ref="myStaticObject" /> 
      </object> 

ここで何が起こっているのでしょうか?

答えて

1

この解決策は簡単であることが判明しました。

ServiceBase[] ServicesToRun = new ServiceBase[] { new MyWindowsSvcHost() }; 

新しいインスタンスを作成する代わりに、私はそれを春にロードしたインスタンスに解決する必要がありました。

関連する問題