如果使用第三方 dll,则实施依赖注入

Implement dependency injection if using third party dll

在我的 MVC5 Web 应用程序中,我使用了依赖项注入。但是在这里,对于登录和相关功能,我正在使用现有的 dll 和该 dll 中的调用方法。现在我正在创建 class 的对象并调用相应的方法。我可以在这里实现依赖注入吗,因为我没有这个 class

的接口

例如 我在我的应用程序中引用了一个名为 MyCompany.Authenticate 的 dll 对于登录,我正在该 dll 中创建一个 class 的对象,并在该 class 中调用登录方法 即

WebAuthenticationClass obj =new WebAuthenticationClass(); 
obj.login(username,pwd);

这就是我现在正在做的。我需要将新对象创建更改为依赖注入。

并非代码中的所有依赖项都需要抽象掉。但是,如果您确定代码中不需要对 MyCompany.AuthenticateWebAuthenticationClass 的依赖,则应将其置于抽象之后。

WebAuthenticationClass 没有实现抽象并不重要,因为这种抽象通常很有用。 abstraction/interface 必须由消费者定义,并且必须特定于消费者的需求。由第 3 方工具定义的抽象通常是无用的,因为它们是通用的并且是为库本身量身定做的。并且不要忘记,在使用该库的抽象时,您仍然依赖于该库。

所以你应该做的是:

  1. 在您自己的应用程序中定义您的代码可以依赖的抽象
  2. 创建一个实现您的接口并调用 WebAuthenticationClass.
  3. 的实现(适配器)

请注意,此接口可以具有与 WebAuthenticationClass 完全不同的方法签名。再次声明:以对您的应用程序最有用的方式定义接口,即使这会使适配器更难实现。

我倾向于使用 Castle Windsor,我知道它可以处理这个问题。我假设大多数其他 IoC 框架也会。使您的 class 接受 WebAuthenticationClass 作为依赖项,然后从其他程序集注册该类型。这应该是你所需要的。