【发布时间】:2021-06-24 13:38:12
【问题描述】:
登录信息类
我有一个LoginInfo 类,它获取并设置用户登录的用户名,以跟踪多个表单或项目中的当前用户。
public class LoginInfo
{
public static string Username = "NoLoginDetected";
public static void SetLoginData(string un)
{
Username = un;
}
public static string GetLoginData()
{
return Username;
}
}
用户实体
public class User:EntityBase
{
public string Name{ get; set; }
public string LastName { get; set; }
public string Username{ get; set; }
public string Password{ get; set; }
public string UserType { get; set; }
}
我也有多个项目,但我们可以将它们分成 2 个主要部分。
1- 登录模块
此项目包含引用其他模块的登录表单,并根据登录授权指向相应模块的主表单。如果登录成功,也将用户名设置为LoginInfo.SetLoginData(username);。
(例如,用户日志的 UserType = "Designer" -> 指向 Designer 模块 Main Menu)
2- 用户授权依赖模块/项目。
- 设计器模块
包含一个主菜单,其中包含设计人员的某些任务。
- 管理模块
包含一个主菜单,其中包含管理员的某些任务。
还有几个类似上面的模块。
我可以使用基本的登录表单访问其他模块
FormDesigner frm = new FormDesigner();
frm.ShowDialog();
但我也想阻止对这些模块的访问,如果有任何其他项目或其表单在登录表单的访问之外加载,并且如果是这种情况,则将用户重定向到登录表单。 问题是,我的登录项目已经引用了这些其他项目,因此由于循环依赖,我无法将登录项目添加为对它们的引用。
// - Designer or Admin Main Form
if(LoginInfo.GetLoginData() == "NoLoginDetected")
{
MessageBox.Show("No login detected. Redirecting to the login page...");
this.Hide();
// --- HERE IS THE ISSUE ------
FormLogin frmLogin = new FormLogin();
frmLogin.ShowDialog();
// Because i cannot add a referance to the Login Project since it causes Circular Dependency
this.Close();
}
总结
我的目标是能够通过单个登录表单/项目登录到其他模块,具体取决于登录用户的权限,同时还阻止访问其他模块,如果它们在没有登录的情况下被访问,从而导致返回登录表单。
【问题讨论】:
-
看来你需要一些
Events。 -
您可以创建另一个项目,引用这两个项目,并且每个表单都应该具有显示功能
标签: c# winforms visual-studio-2019 circular-dependency multiple-projects