2016-08-29 12 views
0

는 I 상위 선반을 사용하며, I가 갖는 서비스의 기본 방법 윈도우 서비스, I이 서비스의 정적 속성에 주입하는 스프링을 사용하고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); 
      } 
     } 

있다. 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> 

처럼 보인다 그리고 서비스 안에, 내가 재산

공공 정적 SomeClass의 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() }; 

새 인스턴스를 만드는 대신로드 된 인스턴스로 풀어야했습니다.