2012-03-30 2 views
2

私はWebFormsを使って、すべてのWebアプリケーションで共有するボキャブラリ(N言語用)を作成しています。すべてのWebアプリケーションでクラスを共有することはできますか?

MyLanguages.csに似ています。それから私は自分の言葉を得るために静的な方法を作ります。しかし、私はすべての私のアプリケーションのためにそれを持っていないだろう、ALLの1つ(メモリではなく、N)。

あなたが私に提案することができます最善の戦略は何ですか?

これは私のクラスでなければなりません:コピーせずに

Vocabulary.HelloEnglish; 

と、そのクラスを継承する:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

public class Vocabulary 
{ 
    public const string HelloEnglish = "Hello"; 
    public const string HelloItalian = "Ciao"; 

    public Vocabulary() 
    { 

    } 
} 

と、どこにでも私のWebアプリケーションでは、私は呼びたいと思いますWebアプリケーションごとに、常に同じです...リソースの無駄...成長するのでまた...

+1

私たちがあなたを助けることができるものの例を示します。 – Aliostad

+0

あなたは何を意味するか正確には分かりません。しかし、機能を必要とするもので参照できるスタンドアロンのDLLを作成することはできませんか? –

+0

私はMarkzzzが同じマシン上の多くのアプリケーション間でボキャブラリの1つのインスタンスを共有したいと思います。 – Nikolay

答えて

0

私はちょうど新しい言語や単語を追加することが行うことが些細なことだろうと何の再コンパイルを必要としない、それをデータベースに格納します。これにより、リトライバルでよりダイナミックになることができます。

+0

uhm ...本当は!私が必要とするたびにデータベース呼び出しです!だから、一度ですべてをダウンロードし、「永遠に」それを格納最高のだろう...あなたは... – markzzz

3

リソースを使用してローカライズすることをお勧めします。あなたのアプリケーションの一つに、この語彙をホストすることができます(最初の1が開始)、他のすべてのアプリがそのホストに接続することができる窓サービス展開の問題を回避するために

+0

わかりません - http://www.codeproject.com/Articles/5447/NET-Localization-リソースファイルの使用 – markzzz

+0

例を言っているのかについて – Nikolay

0

。 tcp、名前付きパイプ(どちらもWCFで使用できる)、COMなど、アプリケーションが相互に相互運用できる方法はたくさんあります。そして、Windowsは、すべてのアプリケーション間で同一のインスタンスを共有するため、また、あなたがアセンブリ自体のメモリを心配する必要はありません、このアセンブリを使用すること

0

このようなクラスは、長期的に管理するための混乱だろう。

あなたはクラスが必要な場合は、より良いアプローチは、プロパティ「こんにちは」を持つインターフェイスIVocabularyを、作成することです。 必要なだけ多くの言語用に実装してください。 その後、シングルレットクラスを維持することができます。このクラスは、IVocabularyのインスタンスを返すことができます。実行時に言語を変更するSetVocabulary(文字列言語)メソッドを使用することもできます。

public interface IVocabulary 
{ 
    string Hello { get; } 
} 

public class EnglishVocabulary : IVocabulary 
{ 
    public string Hello 
    { 
     get { return "Hello"; } 
    } 
} 

public class ItalianVocabulary : IVocabulary 
{ 
    public string Hello 
    { 
     get { return "Ciao"; } 
    } 
} 

public class CurrentVocabulary 
{ 
    private static IVocabulary instance; 

    private CurrentVocabulary() 
    { 
    } 

    public static IVocabulary Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 

    public static void SetVocabulary(string language) 
    { 
     switch (language.ToLower()) 
     { 
      case "english": 
       instance = new EnglishVocabulary(); 
       break; 
      case "italian": 
       instance = new ItalianVocabulary(); 
       break; 
      default: 
       throw new ArgumentException("Language " + language + " not available."); 
       break; 
     } 
    } 
} 

ただし、データベースに言語を格納することはこれまでのところ最高かつ動的なアプローチです。データベース駆動型ソリューションにも同様のモデルを使用できます。

関連する問題