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

Posted

技术标签:

【中文标题】我可以为我的所有 Web 应用程序共享一个课程吗?【英文标题】:Can I have a class shared for all my web applications? 【发布时间】:2012-04-14 06:40:47 【问题描述】:

我即将通过 WebForms 制作一个词汇表(适用于 N 种语言),我将为我的所有 Web 应用程序共享。

喜欢 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;

无需为每个 Web 应用程序复制和继承该类,这始终是相同的...浪费资源...还因为它会增长...

【问题讨论】:

举一个例子说明它需要实现什么,我们可以为您提供帮助。 不确定您的意思。但是你能不能创建一个独立的 dll,然后可以被任何需要该功能的东西引用? 据我了解,Markzzz 希望在同一台机器上的多个应用程序之间共享一个 Vocabulary 实例。 @Nikolay :是的,我需要什么...... 【参考方案1】:

我建议你使用 Resources 并将它们本地化。

【讨论】:

示例 - codeproject.com/Articles/5447/…【参考方案2】:

以WCF Windows Service 运行它。

【讨论】:

【参考方案3】:

我只是将它存储在数据库中,添加新的语言和单词将是微不足道的,并且不需要重新编译任何东西。这也让您在检索时更有活力。

【讨论】:

嗯...不是真的!每次我需要它都是一个数据库调用!所以最好一次下载它们并“永远”存储它......【参考方案4】:

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

【讨论】:

【参考方案5】:

从长远来看,这样的课程管理起来会很混乱。

如果您需要一个类,更好的方法是创建一个接口 Ivocabulary,它具有属性“Hello”。 为尽可能多的语言实现它。 然后,您可以保留一个单音类。此类可以返回 Ivocabulary 的实例。您还可以使用 SetVocabulary(string language) 方法在运行时更改语言。

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;
        
    

但是,将语言存储在数据库中是迄今为止最好的动态方法。您可以将类似的模型用于数据库驱动的解决方案。

【讨论】:

以上是关于我可以为我的所有 Web 应用程序共享一个课程吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该为我的 POS Web 应用程序使用构建 API 吗?

我可以防止共享布局用于错误消息吗?

数据库是为我的 Web 应用程序存储数据的最佳选择吗?

启用钥匙串共享会改变您的 AppID 吗?

DAL、会话、缓存架构

我可以根据站点标准为我的树状图着色吗