我可以为我的所有Web应用程序共享一个类吗?

问题描述:

我用WebForms来制作一个词汇表(适用于N种语言),我将分享我的所有网络应用程序。我可以为我的所有Web应用程序共享一个类吗?

Like MyLanguages.cs。然后,我将创建静态方法来获得我的话。但我不会为我的所有应用程序,只有一个为所有(内存中的一个,而不是N)。

你可以向我建议的最佳策略是什么?

这应该是我的班:

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应用程序,我想打电话:

Vocabulary.HelloEnglish; 

没有复制和继承类对于每个Web应用程序来说,这总是相同的...浪费资源...也因为它会增长...

+1

提供了一个需要存档的例子,我们可以帮助您。 – Aliostad 2012-03-30 14:54:43

+0

不确定你的意思。但是,你不能创建一个独立的dll,然后可以被任何需要的功能引用吗? – 2012-03-30 14:55:23

+0

据我所知,Markzzz希望在同一台机器上的许多应用程序之间共享一个单词实例。 – Nikolay 2012-03-30 14:57:00

将其作为WCFWindows Service运行。

我只是将它存储在一个数据库中,添加新的语言和单词将是微不足道的,不需要重新编译任何东西。这可以让你在复兴的同时更加充满活力。

+0

呃...不是真的!每次我需要它是一个数据库调用!所以最好将它们全部下载一次,并将其永久保存...... – markzzz 2012-03-30 15:02:43

我建议你使用资源并进行本地化。

+0

不知道你在说什么... – markzzz 2012-03-30 15:03:34

+0

示例 - http://www.codeproject.com/Articles/5447/NET-Localization-使用-资源文件 – Nikolay 2012-03-30 15:06:01

为了避免Window Service的部署问题,您可以在您的应用程序之一(第一个启动的应用程序)中托管此词汇表,并且所有其他应用程序都可以连接到该主机。应用程序可以通过多种方式进行互操作 - tcp,命名管道(都可以与WCF一起使用),COM等等。而且你也不用担心汇编本身的内存,因为Windows将在所有应用程序之间共享相同的实例,使用该程序集

像这样的类将是一个混乱的长期管理。

如果你需要一个类,更好的方法是创建一个接口IVocabulary,它具有属性'Hello'。 根据需要为其实现尽可能多的语言。 然后你可以保留一个单独的课。这个类可以返回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; 
     } 
    } 
} 

但是,到目前为止,在数据库中存储语言是最好的和动态的方法。您可以使用类似的数据库驱动解决方案模型。