0

個別の dll からいくつかのコンポーネントを動的にロードするアプリケーションがあります。これらのコンポーネントには固定名がありますが、ローカライズされた名前をユーザーに表示したいので、名前をローカライズする必要があります。

名前をローカライズする必要があるという事実は、コンポーネント自体の問題ではないため、コンポーネントのモデルを DisplayName や LocalisedName などのプロパティで汚染したり、コンポーネントのリソースをコンポーネントのdll。しかし、これらのコンポーネントはプラグ可能であるため、表示名のリソースをアプリケーションにライブにすることはできません。新しいコンポーネントを追加したときに、アプリケーションのリソースを更新する必要があり、コンポーネントをプラグ可能にするポイントが無効になります。 .

この問題の一般的な解決策はありますか? 考えられる解決策は次のとおりです。

1\ 名前を表示するために GUI コードが呼び出す表示名というプロパティがあります。これは、コンポーネントを含むアセンブリと同じ dll (またはサテライト dll) に存在するリソースで問題なく動作します。しかし、これはコンポーネントが気にするべきではない情報でモデルを汚染しているようです。

2\ GUI を備えたアプリに、名前付きコンポーネントのリソースを独自のリソース ファイルから検索させます。これは、動的に読み込まれた新しいコンポーネントを含む新しいアセンブリが追加されたときにアプリのリソースを更新する必要があるため、失敗します。

3\ コンポーネントのローカライズされた名前について、コンポーネントの元となったアセンブリのリソースをアプリで調べます。ローカライズされた名前がコンポーネントのアセンブリに存在するため、コンポーネントと共に配布されるため、これは適切に思えますが、プレゼンテーション レイヤーを使用するアプリは、コンポーネント dll からローカライズされた文字列のルックアップを開始するため、コンポーネントはその名前について何も知る必要がありません。ローカリゼーションとそのモデルが汚染されていません。

オプション3は可能ですか?考慮していない他のオプションはありますか?

乾杯...

4

1 に答える 1

0

オプション3は私がすることであり、それは可能だと思います。プラグインの名前を知っていて、リフレクションを使用してクラスをインスタンス化できる場合。次に、そのクラスにLocalizedNameを照会します。これは、プラグインがリソースアセンブリからフェッチします。衛星リソースアセンブリがどのように機能するかを理解していると思います。

#3について、うまくいかないことはありますか?あなたが何をしないかを指定すれば、私は助けることができるかもしれません...

于 2009-10-09T09:41:44.830 に答える