首页 > 解决方案 > C#:将一个类的实例从一个模块传递到另一个模块

问题描述

我有两个模块,它们可以同时出现在目标中,也可以单独出现。让我们称它们为ModuleAand 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) {

}

标签: c#typesmoduleinterfacedependencies

解决方案


如果您有一些需要共享接口/类型的模块,但您不希望这些模块之间存在依赖关系,则需要另一个定义接口/类型的模块。

一般来说,这个其他模块有前缀Abstractions,如Microsoft.Extensions.Logging.Abstractionsxunit.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。


推荐阅读