2016-04-12 8 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

必要がない場合は、サービス内のIOCへの参照が醜いです。なぜ型を登録していないのですか?

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 
    } 
} 
関連する問題