2

サービスアセンブリをServiceStackにプラグイン可能にする(構成ファイルから読み取る)方法について質問があります。サービスアセンブリを構成ファイルから登録し、次のようにAppHostコンストラクターにハードコーディングしないようにします。

public appHost() : base("My Pluggable Web Services", typeof(ServiceAssembly1).Assembly,  typeof(AnotherServiceAssembly).Assembly) { }

このコンストラクターの外部でアセンブリを登録する他の方法を見つけることができませんでした。IEnumerable<Assembly>コンストラクターはparamsも受け入れ、たとえばパラメーターとしてのオーバーロードはありません。アイデアは、サービススタックのRESTWebサイトに触れることなくサービスアセンブリをプラグインできるようにすることです。

インターフェイスを見ましたPluginが、サービスアセンブリを動的にプラグインするのではなく、サービススタックを拡張するために使用する方が適していると思います。

現在のサービススタックリリースでそのようなプラグ可能なサービスアセンブリ機能を実装する方法はありますか?アセンブリの配列を受け入れるコンストラクターオーバーロードを追加することもできますか?

前もって感謝します

4

1 に答える 1

3

ServiceStack の目的は、AppHostすべてのサービスの依存関係へのハード リファレンスを持つ、ソリューション用にカスタマイズされた特注のクラスになることです。型指定されていない構成ではなくコードで依存関係を宣言すると、ビルド時にアプリケーションが正しく構成されていることを確認するのがはるかに簡単になります。

AppHostBase.CreateServiceManager()をオーバーライドすることで、 ServiceStack が Service タイプを検出するために使用する戦略をオーバーライドできると述べました。

protected virtual ServiceManager CreateServiceManager(params Assembly[] assembliesWithServices)
{       
    return new ServiceManager(assembliesWithServices);
    //Alternative way to inject Container + Service Resolver strategy
    //return new ServiceManager(new Container(),
    //    new ServiceController(() => assembliesWithServices.ToList().SelectMany(x => x.GetTypes())));
}    

それ以外の場合は、アセンブリを AppHost に渡すだけで、必要なことを行うことができます。

var appHost = new AppHost("Service Name", MyConfig.LoadAssembliesFromConfig());
(new AppHost()).Init();
于 2013-02-06T16:44:21.243 に答える