c# - C#:将一个类的实例从一个模块传递到另一个模块
问题描述
我有两个模块,它们可以同时出现在目标中,也可以单独出现。让我们称它们为ModuleA
and ModuleB
。
ModuleA
有一个特定的类型,我想在 中使用它ModuleB
,我们称之为SpecificType
。但是,我希望仍然能够自己包含ModuleB
(没有ModuleA
)。
是否可以通过使用接口/协议来解决此问题?我感兴趣的是具有特定接口的对象将作为参数传递,因此不可能传递例如字符串。
示例方法ModuleB
:
// SpecificType is coming from ModuleA
public void MyMethod(SpecificType myVariableName) {
}
我可能想要的是与此类似的东西:
// SpecificType is coming from ModuleA, SpecificTypeInterface from ModuleB
// SpecificType implicitly conforms to SpecificTypeInterface
public void MyMethod(SpecificTypeInterface myVariableName) {
}
解决方案
如果您有一些需要共享接口/类型的模块,但您不希望这些模块之间存在依赖关系,则需要另一个定义接口/类型的模块。
一般来说,这个其他模块有前缀Abstractions
,如Microsoft.Extensions.Logging.Abstractions或xunit.abstractions。
在你的情况下:
模块抽象
public interface ISpecificTypeInterface
{
void Foo();
}
模块A
public class SpecificType : ISpecificTypeInterface
{
public void Foo()
{
Console.WriteLine("From ModuleA")
}
}
模块B
public void MyMethod(ISpecificTypeInterface spe)
{
spe.Foo();
}
ModuleA 和 ModuleB 依赖于 ModuleAbstractions。
推荐阅读
- javascript - 在节点js中将函数名作为参数传递
- python - 将重复值的键添加到列表 python
- python - 如何使用 python 自动化应用程序生命周期管理
- spring-boot - 带有@Profile 的控制器未加载
- sql - Ms Access - 显示两个查询结果之间的差异
- angular - Angular2/Ionic 5:如何避免在其某些子组件中显示带有路由器插座的工具栏?
- matplotlib - Matplotlib Colorbar 缺少 1 个必需的位置参数:'mappable'
- c - 在代码块中运行调试器时出现错误
- python - 在 python 中使用 fpdf 创建 pdf。无法循环向右移动图像
- r - 在 R 中为热图添加连续图例(首选基本 R,因为 ggplot 不起作用)