我在应用程序之间有一个.dll分层系统,其中最低层具有一个提供某些功能的类-可以通过GetClass()函数接收该类的实例,然后可以访问其属性(基本上是一个集合)更改对象的信息)。

现在我注意到,当我想从下一个较高级别的.dll访问该信息时,编译器提示说我没有引用较低级别的.dll(定义该类的那个)-实际上,我想避免这种情况,在我的架构中有一个很好的分层结构。

如何解决这个问题?我可以重新公开引用的类型吗?如果我想要完全相同的功能,是否真的需要编写自己的包装程序?还是我什至需要再次引用低级.dll?

DLL 1:

class myClass;
myClass GetMyClass();

DLL 2:
myClass GetMyClass();

EXE文件:

如何在不引用DLL 1的情况下调用GetMyClass(DLL 2)来访问结果?

最佳答案

如果在myClass中定义了dll1,似乎没有办法实现这一点,因为myClass类型的对象可以在运行时实例化。为避免这种情况,您需要更改GetMyClass()dll2的返回类型,以返回dll2中定义的内容。它可以是一个非常类似于myClass并具有相同属性的类(您甚至可以使用AutoMapper之类的工具轻松地在对象之间进行转换),但是它绝对应该在dll2中。就像是:

// dll1
class myClass
{
    ...
}

myClass GetMyClass()
{
    ...
}

// dll2
class myClass2
{
    public myClass2(myClass c)
    {
        // instantiate myClass2 with values from myClass
    }
}

myClass2 GetMyClass()
{
    // somehow get myClass and convert it to myClass2 here
}

关于c# - 公开引用的类型(类),而无需其他引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15792543/

10-14 15:00
查看更多