Могу ли я иметь общий класс для всех моих веб-приложений? - PullRequest
2 голосов
/ 30 марта 2012

Я собираюсь с помощью WebForms создать словарь (для N языков), которым я поделюсь для всех своих веб-приложений.

Как и 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()
    {

    }
}

и везде в моих веб-приложениях я хотел бы позвонить:

Vocabulary.HelloEnglish;

Без копирования и наследования этого класса для каждого веб-приложения, которое всегда одинаково ... пустая трата ресурсов ... и потому, что он будет расти ...

Ответы [ 5 ]

3 голосов
/ 30 марта 2012

Я предлагаю вам использовать ресурсы и локализовать их.

1 голос
/ 30 марта 2012

Запустите его как WCF Служба Windows .

0 голосов
/ 30 марта 2012

Подобный класс был бы хаосом для управления в долгосрочной перспективе.

Если вам нужен класс, лучшим подходом было бы создание интерфейса 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;
        }
    }
}

Тем не менее, сохранение языков в базе данных пока является лучшим и динамичным подходом.Вы можете использовать аналогичную модель для решения на основе базы данных.

0 голосов
/ 30 марта 2012

Чтобы избежать проблем развертывания с Window Service, вы можете разместить этот словарь в одном из ваших приложений (первое запущенное), и все другие приложения могут подключаться к этому хосту.Есть много способов взаимодействия приложений друг с другом - TCP, именованные каналы (оба могут использоваться с WCF), COM и так далее.Кроме того, вам не нужно беспокоиться о памяти для самой сборки, поскольку Windows будет использовать один и тот же экземпляр для всех приложений, использующих эту сборку

0 голосов
/ 30 марта 2012

Я бы просто сохранил его в базе данных, добавив новые языки и слова, что было бы тривиально и не потребовало бы перекомпиляции чего-либо. Это позволяет вам быть более динамичным с повтором.

...