引用的 .dll 中的对象名称更改炸毁应用程序
Object name inside of referenced .dll changed blowing up application
如果有人能向我解释 .NET 引用在编译 .dll 时如何工作,我将不胜感激。
我有两个 .dll-s,我的主要 application.dll 引用了我的 services.dll。 services.dll 的目的是为与第三方服务的通信提供一个解耦层,以便对集成的更改不会直接影响应用程序。
为了实现这种解耦,我继承了服务主对象,在主应用程序中公开和使用新对象:
public class CustomClient : ServiceClient_v1
{
public CustomClient(binding, address) : base (binding, address) {}
}
但是,我发现当 ServiceClient_v1 更新为 ServiceClient_v2 并且我尝试更新 services.dll 然后我的 application.dll 爆炸说:
Could not load type "ServiceClient_v1" from assembly services.dll
所以它仍然挂在对我试图隐藏的另一个对象的直接引用上。我认为这是设计使然,只是与我不理解的编译有关。
有没有办法实现我想要的?为什么我的方法不起作用?
由于您是从 application.dll
中的 ServiceClient_v1
派生 CustomClient
,因此它仅适用于包含 services.dll
定义的旧版本 services.dll
=11=]。正如 Lasse Vågsæther Karlsen 指出的那样,ServiceClient_v1
class 成为 CustomClient
的 public 声明的一部分。
我相信在您的申请中应用 Dependency Injection and the Liskov substitution principle 会让您受益。
为了实现真正可互换的 services.dll
的目标,您需要重构您的架构,从 application.dll
中移除 services.dll
的依赖性,反之亦然。
为您的 ServiceClient
类型定义一个 Interface。 CustomClient
和 ServiceClient_v1
都必须实现这个接口。
当您稍后更新代码以使用 ServiceClient_v2
时,它还应该实现该接口,该接口将保持不变。现在一切都继续工作,无需重新编译 application.dll
项目。
或者,在从 v1 移动到 v2 时,不要重命名 services.dll 中的 ServiceClient
类型 。 这就是 git 或 SVN 等版本控制系统的用途。
如果有人能向我解释 .NET 引用在编译 .dll 时如何工作,我将不胜感激。
我有两个 .dll-s,我的主要 application.dll 引用了我的 services.dll。 services.dll 的目的是为与第三方服务的通信提供一个解耦层,以便对集成的更改不会直接影响应用程序。
为了实现这种解耦,我继承了服务主对象,在主应用程序中公开和使用新对象:
public class CustomClient : ServiceClient_v1
{
public CustomClient(binding, address) : base (binding, address) {}
}
但是,我发现当 ServiceClient_v1 更新为 ServiceClient_v2 并且我尝试更新 services.dll 然后我的 application.dll 爆炸说:
Could not load type "ServiceClient_v1" from assembly services.dll
所以它仍然挂在对我试图隐藏的另一个对象的直接引用上。我认为这是设计使然,只是与我不理解的编译有关。
有没有办法实现我想要的?为什么我的方法不起作用?
由于您是从 application.dll
中的 ServiceClient_v1
派生 CustomClient
,因此它仅适用于包含 services.dll
定义的旧版本 services.dll
=11=]。正如 Lasse Vågsæther Karlsen 指出的那样,ServiceClient_v1
class 成为 CustomClient
的 public 声明的一部分。
我相信在您的申请中应用 Dependency Injection and the Liskov substitution principle 会让您受益。
为了实现真正可互换的 services.dll
的目标,您需要重构您的架构,从 application.dll
中移除 services.dll
的依赖性,反之亦然。
为您的 ServiceClient
类型定义一个 Interface。 CustomClient
和 ServiceClient_v1
都必须实现这个接口。
当您稍后更新代码以使用 ServiceClient_v2
时,它还应该实现该接口,该接口将保持不变。现在一切都继续工作,无需重新编译 application.dll
项目。
或者,在从 v1 移动到 v2 时,不要重命名 services.dll 中的 ServiceClient
类型 。 这就是 git 或 SVN 等版本控制系统的用途。