c# - 在紧凑的框架中以多种形式提供变量

标签 c# compact-framework windows-ce global-variables

我正在为 Windows CE 5.0 设备编写一个应用程序,该应用程序在第一种表单中要求输入用户名(当应用程序启动时),然后我得到来自数据库表的userId

之后出现一个接收 userId 的菜单表单,我必须将 userId 发送到菜单选项的每个构造函数,以便在这些表单中使用它。我认为一定有更好的方法来做这样的事情。

示例:

public partial class Menu : Form
{
    int userId;
    public Menu(int userId)
    {
        InitializeComponent();
        this.userId = userId;
    }

    private void buttonDelivery_Click(object sender, EventArgs e)
    {
        Delivery delivery = new Delivery(userId);
        delivery.Show();
        this.Hide();
    }
    ...

也许我应该使用这样的全局变量?

public static class UserConfiguration
{
    public static int userId;
}

这不是不好的做法吗?

最后请记住,紧凑框架不支持 app.config 文件

最佳答案

就我个人而言,我会投票支持“两者都不是”,但会使用其他一些可用的架构工具。

我非常倾向于拥有一个包含所有用户信息的类(您正在使用的 ID,然后可能还有其他任何信息,例如姓名等)。我将创建一个实例并在提交第一个表单(登录)时填充该信息,并将其保存在 DI 容器中(我使用 this one specifically ,但任何 CF-supporting container 都可以)。

然后,我要么使用注入(inject)来自动将该实例推送到任何需要它的类中,要么让消费者根据需要将其从容器中拉出。我使用哪种机制取决于我使用的容器以及我需要信息的具体方式/时间。

由于您需要的数据来自数据库,因此我实际上倾向于使用 ORM(我使用 this one )来提取数据,这将为您提供包含您的用户信息的实体实例无论如何,都会自动追随。

关于c# - 在紧凑的框架中以多种形式提供变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024856/

相关文章:

c# - 在 TextBox 中启用除最后 N 个字符之外的密码字符/限制屏蔽字符

c# - 返回选定的标签页名称

c# - SQL Server CE 回滚不会撤消删除

c++ - 如何在 Windows CE Direct-X 应用程序中显示(打印机)对话框?

windows-ce - 连接到 conmanclient2/cmaccept 的 api

c# - 如何在automapper中映射内部类

c# - 电话簿 - 进入类(class)列表

.net - 是否有支持 iPhone 风格触摸屏行为的 Windows Mobile 控件库?

c# - 如何阻止 PDA 休眠

c# - 如何将字符串转换为控件?