如果使用第三方DLL,则实现依赖注入

时间:2015-02-04 18:46:39

标签: c# dependency-injection

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

例如 我在我的应用程序中引用了一个名为MyCompany.Authenticate的DLL 登录我在该DLL中创建一个类的对象并在该类中调用login方法 即

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

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

2 个答案:

答案 0 :(得分:0)

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

WebAuthenticationClass没有实现抽象并不重要,因为这种抽象通常是有用的。抽象/接口必须由消费者定义,并且必须特定于消费者的需求。由第三方工具定义的抽象通常是无用的,因为它们是通用的并且为库本身定制。并且不要忘记在使用图书馆的抽象时,你仍然依赖于图书馆。

所以你应该做的是:

  1. 在您自己的应用程序中定义代码可以依赖的抽象
  2. 创建一个实现(适配器),实现您的接口并调用WebAuthenticationClass
  3. 请注意,此界面可以具有与WebAuthenticationClass完全不同的方法签名。再次:以对应用程序最有用的方式定义接口,即使这会使适配器更难实现。

答案 1 :(得分:0)

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