我在应用程序之间有一个.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/