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

时间:2012-03-30 14:52:10

标签: c# .net vocabulary

我正在使用WebForms制作一个词汇表(用于N种语言),我将为我的所有Web应用程序分享。

喜欢MyLanguages.cs。然后我将创建静态方法来获取我的话。但是我不会为我的所有应用程序提供它,只有一个用于ALL(一个在内存中,而不是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()
    {

    }
}

并且,在我的网络应用程序的任何地方,我都想打电话:

Vocabulary.HelloEnglish;

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

5 个答案:

答案 0 :(得分:3)

我建议您使用资源并对其进行本地化。

答案 1 :(得分:1)

将其作为WCF Windows Service运行。

答案 2 :(得分:0)

我只是将它存储在一个数据库中,添加新的语言和单词将是微不足道的,不需要重新编译任何东西。这样,您也可以通过回溯更加动态。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这样的课程将是一个长期管理的混乱。

如果你需要一个类,更好的方法是创建一个接口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;
        }
    }
}

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