2016-05-12 124 views
1

我正在做一個應用程序,使用ServiceStack。我可以注入的對象沒有問題,但是,該對象可以服務類之外進行修改,所以,我需要重新注入再次 下面是代碼:服務堆棧注入對象

public class ClientManager: ApplicationContext{ 
    public ClientManager(AppConfig appConfig) 
    { 
     _appConfig = appConfig; 
     _activeForm = LayoutFactory(appConfig.Layout); 
     var appHost = new AppHost(_activeForm, _appConfig); 
     var listeningOn = string.Format("http://*:{0}/", new Uri(appConfig.UrlBroker).Port); 
     appHost.Init(); 
     appHost.Start(listeningOn); 
     var timerMetadata = new Timer(CheckMetadata, null, 0, 60000); 
    } 
} 

    public class AppHost : AppSelfHostBase 
    { 
     private ILayout _layout; 
     private AppConfig _appConfig; 
     public AppHost(ILayout activeForm, AppConfig appConfig) 
     : base("ClientService", typeof(ClientService).Assembly) 
    { 
     _layout = activeForm; 
     _appConfig = appConfig; 
    } 

    public override void Configure(Container container) 
    { 
     container.Register("activeForm", _layout); 
     container.Register("config", _appConfig); 

    } 
} 

    public class ClientService : Service 
    { 
     public HttpResult Post(Person request) 
     { 
      HttpResult response = new HttpResult(); 
      _initConf = ServiceStackHost.Instance.Container.ResolveNamed<AppConfig>("config"); 
     } 
    } 

所以,該類ClientManager有一個線程這可以修改對象appConfig和activeForm(此對象被注入服務類) 現在,如果我修改對象,它不會再注入它。我認爲我應該處置AppHost,然後重新開始,你覺得怎麼樣? 謝謝

回答

2

這是非常罕見的,你想要處置AppHost,除非你正在運行集成測試,你想要啓動/銷燬多個AppHost實例。

而且我強烈建議不要註冊的依賴在使用的名稱,只需使用類型的依賴關係爲正常,例如:

container.Register(_layout); 
container.Register(_appConfig); 

在國際奧委會註冊的任何依賴性,然後自動注入到你的服務類通過聲明公共財產與類型,例如:

public class ClientService : Service 
{ 
    public AppConfig AppConfig { get; set; } 

    public HttpResult Post(Person request) 
    { 
     HttpResult response = new HttpResult(); 
     var _initConf = AppConfig; 
    } 
} 

這將給其註冊在國際奧委會,因此,如果您修改實例後服務WOU相同的實例ld默認注入相同的修改實例。

+0

感謝您的評論。我按照你的建議做了。它仍然工作正常(對象被注入到服務類中)。但是,如果我將對象修改爲ClientManager類,則在服務類中,我看不到對象已更新.. –

+0

看不到這是可能的,它必須注入相同的實例,它不能創建新的實例,它不知道如何。你確定你正在修改實例,而不是重新分配它,因爲它不會修改實例。 – mythz

+0

對不起,我把錯誤的數據分配到實例中..謝謝! –