0

そのため、Windows サービス内で自己ホストされるステートフルな Wcf サービスを実装しました。
私はこのサービスをリモート ハードウェア ドライバー (一種) として使用しています。
サービスは基盤となるハードウェアへのシリアル アクセスを強制する必要があるため、次の属性を持つ一意の単一インスタンスとしてサービスを設定します。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

それは正しく動作しますが、Castle に依存関係を管理してもらいたいのですが、ここで問題が発生します。
依存性注入とシングル インスタンス モードがうまく連携しないことがわかりました (ここに参照がありますが、さらに多くのグーグルを見つけることができます)...

システムにインストールされているデバイスごとに異なるインスタンスが必要なため、Castle が提供する標準のシングルトンを使用できないことに注意してください (同時に複数存在する可能性があります)。したがって、キャッスルのデフォルトの有効期間を使用することは、私にとってオプションではありません。

編集
要求に応じて、サービスを登録して解決するために使用するコードを追加しました。これは非常に標準的で、下線を引くものは何もないと思います。
これは、サービスを登録するために使用するコードです。

container.Register(Component.For<IMyService>().ImplementedBy<MyService>().LifeStyle.Transient);

これは、サービスを解決するために使用するコードです。

public ServiceHostBase Build<T>(SelfHostConfiguration configuration)
{
    // Service configuration is done by code, not by App.config
    Uri[] uris = configuration.Select(e => e.Uri).ToArray();

    var serviceName = typeof(T).AssemblyQualifiedName;
    DefaultServiceHostFactory factory = new DefaultServiceHostFactory();
    var serviceHost = factory.CreateServiceHost(serviceName, uris);
    return serviceHost;
}

特別なことは何もありませんが、それでも役に立つかもしれません。

質問: Castle と InstanceContextMode.Single を連携させることができた人はいますか? それは可能ですか?
ソリューション/アイデアを共有できますか?

4

1 に答える 1