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