以下是我的用例:
Employee Management是一个单独的C#类库项目。 在应用程序级别有一个“员工管理”设置。这意味着存在一个全局布尔变量isEmployeeManagement
如果变量为true,则应在整个应用程序中使用与管理相关的所有代码,例如
IEmployeeManagement.AddUser();
IEmployeeManagement.DeleteUser();
但是如果设置为false,那么;以下几行不应有任何例外。我想到的方法之一就是检查条件。
If (isEmployeeManagement)
IEmployeeManagement.AddUser();
但是我想使用Interfaces实现此功能,而无需在条件中放入任何代码。因此,如果设置为false,则上面的代码不应出现任何错误。
感谢您能否帮助我进行实施。
答案 0 :(得分:1)
因此,如果您具有IEmployeeManagement接口:
public interface IEmployeeManagement {
void AddUser();
}
然后您就有一个实现它的类:
public class RealManagement : IEmployeeManagement {
public void AddUser() { do lots of stuff }
}
进行另一个接口实现,而不是对每个AddUser调用都具有if条件:
public class VoidManagement : IEmployeeManagement {
public void AddUser() { do nothing }
}
这样,您无需在每个方法调用上都设置条件,而只需在类初始化时执行。
如果使用某种依赖注入框架,则只能在每个类创建时将逻辑设置一次,而不必设置。
如果该设置是在整个应用程序级别上,对于所有用户,您可能会有类似的情况
Startup.cs(假设使用.net核心):
public void ConfigureServices(IServiceCollection services)
{
if(Configuration["isEmployeeManagement"] == "true") {
services.AddTransient<IEmployeeManagement>(RealManagement);
} else {
services.AddTransient<IEmployeeManagement>(VoidManagement);
}
}
如何根据获取的isEmployeeManagement,服务的寿命以及正在使用的DI库(如果使用任何东西)来准确地初始化正确的实例更改。但是总体思路是相同的-接口的两种实现在需要的地方调用方法,但是使用某种逻辑对实例进行正确的初始化。