如何将第三方库实例与结构图集成
How to Integrate third party library instances with structure Map
有没有人试过用结构图来管理他们的第三方实例?
很长一段时间以来,我管理第三方库的方法一直是围绕库编写一个包装器 api。
我面临的困境是如何利用结构映射的依赖注入优势,同时我仍然要保留我对第三方库的包装。
例如,如果我有一个 LibraryClass 并且我有我的 class WrapperClass。我的包装器构造函数如下所示。
class WrapperClass : IWrapperClass{
var instance;
public WrapperClass(){
instance = new LibrayClass();
}
}
这个问题是无论我在代码中使用它的什么地方,我都无法模拟这个对象,因为结构图需要访问 LibraryClass 类型才能加载 WrapperClass。
人们为此做了什么?我是否应该只将 LibraryClass 类型暴露给结构图,然后希望它会通过结构图加载?
每当我需要注入第三方依赖项时,我都会用一个接口将其包装起来。我没有将对象公开为实例,而是尝试在包装器上公开底层对象的功能。例如,给定 AmazonS3,包装器 class 可能类似于
class FileStorage : IFileStorage
{
private AmazonS3 _amazon;
public FileStorage(AmazonS3 amazon) { _amazon = amazon }
void StoreFile(string file, string key)
{
_amazon.StoreFile(file, key);
}
}
然后您可以将 IFileStorage 注入您的 class,因为它是一个接口,您可以模拟 class 进行测试。
然后您注册第三个库 class 输入您的结构图配置。
有没有人试过用结构图来管理他们的第三方实例?
很长一段时间以来,我管理第三方库的方法一直是围绕库编写一个包装器 api。
我面临的困境是如何利用结构映射的依赖注入优势,同时我仍然要保留我对第三方库的包装。
例如,如果我有一个 LibraryClass 并且我有我的 class WrapperClass。我的包装器构造函数如下所示。
class WrapperClass : IWrapperClass{
var instance;
public WrapperClass(){
instance = new LibrayClass();
}
}
这个问题是无论我在代码中使用它的什么地方,我都无法模拟这个对象,因为结构图需要访问 LibraryClass 类型才能加载 WrapperClass。
人们为此做了什么?我是否应该只将 LibraryClass 类型暴露给结构图,然后希望它会通过结构图加载?
每当我需要注入第三方依赖项时,我都会用一个接口将其包装起来。我没有将对象公开为实例,而是尝试在包装器上公开底层对象的功能。例如,给定 AmazonS3,包装器 class 可能类似于
class FileStorage : IFileStorage
{
private AmazonS3 _amazon;
public FileStorage(AmazonS3 amazon) { _amazon = amazon }
void StoreFile(string file, string key)
{
_amazon.StoreFile(file, key);
}
}
然后您可以将 IFileStorage 注入您的 class,因为它是一个接口,您可以模拟 class 进行测试。
然后您注册第三个库 class 输入您的结构图配置。