0

Prism アプリケーションで、コンストラクターの実行に時間がかかるコンポーネントがあります (SAPBOBSdll を使用して SAP Business One データベースに接続します)。Unity コンテナーに登録します。

_container.RegisterType<IConnection, Connection>(new ContainerControlledLifetimeManager());

このコンポーネントを解決しようとすると、長い時間がかかります (約 15 秒)。コンポーネントを使用しようとしたときにプログラムがブロックされないように、別のスレッドを使用してコンポーネントを事前に解決するのは悪い習慣ですか? レジスターラインの直後にこれを行い、うまく機能しますが、奇妙な感じがします.

new Task(()=> _container.Resolve<IConnection>()).Start();

これを実行しても問題ないですか、それとも別の方法で実行する必要がありますか?

4

1 に答える 1

2

特にそのコードをモジュールの Initialize() メソッドの下に置き、(オンデマンドではなく) 利用可能なときにモジュールが読み込まれるようにする場合は特に、提案された解決策は私には良いと思います。

おそらく、コードの他の読者にあなたがしていることをより明確にするために、次の行に沿って何かを書きます:

new Task(()=> _container.RegisterInstance<IConnection>(_container.Resolve<Connnection>())).Start();

これにより、そのタイプの将来の解決のためにそのインスタンスをシングルトンとして登録するために明示的に解決していることを読者に明確にします。

于 2013-06-13T20:07:40.177 に答える