繁体   English   中英

有没有更好的方法来实现依赖关系?

[英]Is there a better way to implement dependencies?

以下是我的用例:

员工管理是一个单独的C#类库项目。 在应用程序级别有一个“员工管理”设置。 这意味着存在一个全局布尔变量isEmployeeManagement

如果变量为true,则应在整个应用程序中使用与管理相关的所有代码,例如

IEmployeeManagement.AddUser();
IEmployeeManagement.DeleteUser();

但是如果设置为false,那么; 以下几行不应有任何例外。 我想到的方法之一就是检查条件。

If (isEmployeeManagement)
  IEmployeeManagement.AddUser();

但是我想使用Interfaces来实现这一目标,而无需在其中添加任何代码。 因此,如果设置为false,则上面的代码不应出现任何错误。

感谢您是否可以帮助我进行实施。

因此,如果您具有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库(如果使用)来准确地初始化正确的实例更改。 但是总体思路是相同的-接口的两种实现在需要的地方调用方法,但使用某种逻辑对实例进行正确的初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM