個別の dll からいくつかのコンポーネントを動的にロードするアプリケーションがあります。これらのコンポーネントには固定名がありますが、ローカライズされた名前をユーザーに表示したいので、名前をローカライズする必要があります。
名前をローカライズする必要があるという事実は、コンポーネント自体の問題ではないため、コンポーネントのモデルを DisplayName や LocalisedName などのプロパティで汚染したり、コンポーネントのリソースをコンポーネントのdll。しかし、これらのコンポーネントはプラグ可能であるため、表示名のリソースをアプリケーションにライブにすることはできません。新しいコンポーネントを追加したときに、アプリケーションのリソースを更新する必要があり、コンポーネントをプラグ可能にするポイントが無効になります。 .
この問題の一般的な解決策はありますか? 考えられる解決策は次のとおりです。
1\ 名前を表示するために GUI コードが呼び出す表示名というプロパティがあります。これは、コンポーネントを含むアセンブリと同じ dll (またはサテライト dll) に存在するリソースで問題なく動作します。しかし、これはコンポーネントが気にするべきではない情報でモデルを汚染しているようです。
2\ GUI を備えたアプリに、名前付きコンポーネントのリソースを独自のリソース ファイルから検索させます。これは、動的に読み込まれた新しいコンポーネントを含む新しいアセンブリが追加されたときにアプリのリソースを更新する必要があるため、失敗します。
3\ コンポーネントのローカライズされた名前について、コンポーネントの元となったアセンブリのリソースをアプリで調べます。ローカライズされた名前がコンポーネントのアセンブリに存在するため、コンポーネントと共に配布されるため、これは適切に思えますが、プレゼンテーション レイヤーを使用するアプリは、コンポーネント dll からローカライズされた文字列のルックアップを開始するため、コンポーネントはその名前について何も知る必要がありません。ローカリゼーションとそのモデルが汚染されていません。
オプション3は可能ですか?考慮していない他のオプションはありますか?
乾杯...