C#:将 class 的实例从一个模块传递到另一个模块

C#: pass an instance of a class from one module to another

我有两个模块,它们可以同时存在于目标中,也可以单独存在。我们称它们为 ModuleAModuleB.

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) {

}

如果您有一些模块需要共享 interface/type,但您不希望这些模块之间存在依赖关系,则需要定义 interface/type.

的其他模块

通常此其他模块具有前缀 Abstractions,例如 Microsoft.Extensions.Logging.Abstractions or 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。