2016-04-12 24 views
0

i yapabileceğini, bir hizmet sınıfa dış parametre göndermek gerekir, ama onun en iyi yolu, buraya ne yaptım ise ben bilmiyorum:Kullanım dış parametreleri - 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"); 
    } 
} 

Harika çalışıyor, ancak bunun en iyi seçim olduğuna emin değilim .. Sizce ne düşünüyorsunuz? Teşekkürler

cevap

2

İhtiyaç duyulmadığında Hizmetlerinizdeki IOC'ye başvurmak çok çirkin. Neden sadece türleri kaydetmiyorsun?

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

Ve Hizmet sadece Servis oluşturulduğunda bunlar, örneğin enjekte olacak kamu özellikleri olarak bunları yayınlama ve edebilirsiniz:

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 
    } 
}