4

Service Stack を使用していますが、できません (または、コンストラクターを使用して Service クラスを作成する方法がわかりません)。

これが私がしたことです:

public class AppHost : AppSelfHostBase
{
    public AppHost()
        : base("ClientService", typeof(ClientService).Assembly)
    {
    }

    public override void Configure(Container container)
    {
    }
}


public class Context : ApplicationContext
{
    //This class is invoked from program.cs (winform application)
    //Here i have the logic of what form should i start.
    var listeningOn = string.Format("http://*:{0}/", port);
    var appHost = new AppHost();
    appHost.Init();
    appHost.Start(listeningOn);
    ClientService cl = new ClientService((ILayout)f, i);
}

public class ClientService : Service
{
    private readonly ILayout _activeForm;
    private static Init _initConf;


    public ClientService(ILayout f, Init i)
    {
        _activeForm = f;
        _activeForm.GetClientData(i);
        _initConf = i;
    }

    public HttpResult Post(Person request)
    {
       //Here i use _activeForm and _initConf 
    }
}

だから、私が言ったように、クラス ClientService で、コンストラクターを作成したいのですが、投稿メッセージにリクエストを行うと、次のエラーが表示されます。

サービス 'DexBrokerClient.Services.ClientService' またはその自動配線された依存関係の 1 つを解決しようとしてエラーが発生しました

4

2 に答える 2

4

ServiceStack サービスは自動配線され、コンストラクターとプロパティ インジェクションの両方を使用して作成されます。コンストラクタパラメータは必須であり、ServiceStack の IOC に登録する必要がありますAppHost.Configure()。例:

public override void Configure(Container container)
{
    container.Register<ILayout>(c => ...);
    container.Register<Init>(c => ...);
}

一方、サービスのパブリック プロパティはオプションであり、存在する場合、または存在しない場合は IOC から入力されますnull

サービスの解決

クラス内またはサービス外のシングルトンbase.ResolveService<T>内では、サービスを APIを使用して解決する必要があります。これにより、ServiceStack の IOC から Service クラスが解決され、コンテキスト (存在する場合) が取り込まれます。ServiceHostContext.ResolveService<T>()IRequest

于 2016-04-08T20:55:23.893 に答える