2016-05-12 5 views
1

Я делаю приложение, используя ServiceStack. Я мог бы вводить объект без проблем, но, объект может быть изменен вне класса обслуживания, поэтому, мне нужно повторно вводить снова Вот код:Service Stack inject object

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

Извините, я присваивал неправильные данные в экземпляр .. спасибо! –

Смежные вопросы