2016-04-12 2 views
0

мне нужно отправить внешний параметр в классе обслуживания, я мог бы это сделать, но я не знаю, если его лучший способ, вот что я сделал:Использование внешних параметров в классе обслуживания - ServiceStack

public class Context : ApplicationContext 
{ 
    public Context() 
    { 
    var appHost = new AppHost(i, (ILayout)f); 
    appHost.Init(); 
    appHost.Start(listeningOn);    
    } 
} 

public class AppHost : AppSelfHostBase 
{ 
    private readonly Init _init; 
    private readonly ILayout _activeForm; 
    public AppHost(Init i, ILayout f) 
     : base("ClientService", typeof(ClientService).Assembly) 
    { 
     _init = i; 
     _activeForm = f; 
    } 

    public override void Configure(Container container) 
    { 
     container.Register("init",_init); 
     container.Register("layout", _activeForm); 
    } 
} 

public class ClientService : Service 
{ 
    private Init _initConf; 
    public HttpResult Post(Person request) 
    { 
     _initConf = ServiceStackHost.Instance.Container.ResolveNamed<Init>("init"); 
    } 
} 

Он отлично работает, но я не уверен, что это лучший выбор. Что вы думаете? Спасибо

ответ

2

Уродливо иметь ссылку на МОК в ваших Сервисах, когда это не нужно. Почему вы просто не регистрируете типы?

public override void Configure(Container container) 
{ 
    container.Register(_init); 
    container.Register(_activeForm); 
} 

И в вашей службе, можно просто объявить их как открытые свойства, и они будут вводиться при создании вашей службы, например:

public class ClientService : Service 
{ 
    public Init Init { get; set; } 
    public ILayout ActiveForm { get; set; } 

    public HttpResult Post(Person request) 
    { 
     //Use this.Init or this.ActiveForm 
    } 
} 
Смежные вопросы