2016-05-12 9 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); 

IOCに登録されているすべての依存関係が自動的にあなたのサービスクラスに注入されていますそのタイプでパブリックプロパティを宣言することで、例えば:

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

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

これはIOCに登録されています同じインスタンスを注入するので、あとでサービスWOUのインスタンスを変更した場合デフォルトでは、同じ変更されたインスタンスを挿入します。

+0

ご意見ありがとうございます。私はあなたが推奨するようにしました。それはまだ正常に動作しています(オブジェクトはサービスクラスに注入されます)。しかし、オブジェクトをClientManagerクラスに変更した場合、サービスクラスではオブジェクトが更新されていません。 –

+0

これは可能ですか、同じインスタンスを挿入する必要がありますか、新しいインスタンス、それは方法を知らない。インスタンスを変更していて、再割り当てするだけでなく、インスタンスを変更しないでください。 – mythz

+0

申し訳ありませんが、私はインスタンスに間違ったデータを割り当てていました..ありがとう!! –

関連する問題