如何在插件环境中正确使用枚举和/或自定义对象

本文关键字:枚举 对象 自定义 插件 环境 | 更新日期: 2023-09-27 18:26:30

我遇到了一个问题,我正在努力解决,但无法解决,所以如果可能的话,我会寻求您的帮助。

我正在重构一个最终由三个项目组成的项目。

核心框架(业务和数据逻辑)活动(基于插件)

我试图避免的是交叉引用活动和核心项目。由于曾经是核心逻辑的一部分的类现在在Activities项目中,我不得不复制某些东西,比如Enum和helper类。

这就引出了我的问题:

我引用了一个最初在我的Core中的类,它也是我的Core所需要的。但我的Activities项目中也使用了该类,但如果没有对Core项目的引用,就找不到该类。与我的Activities类中使用的一些枚举相同,但也在我的Core代码中使用。

因此,为了避免在Activities中引用我的Core项目,在Activities项目中复制这些类和枚举可以吗?如果没有,我还有什么选择?

我希望在这个代码中尽可能正确。下星期我的同龄人会看它。

在这种情况下,你有什么建议?希望我足够清楚。

感谢

如何在插件环境中正确使用枚举和/或自定义对象

为了进一步扩展我上面的评论,如果您有在Core和Activities程序集中都使用的类/枚举,请将它们移动到它们自己的独立程序集中(类库-DLL)。然后Core和Activities都可以引用该DLL,而不是相互引用或具有重复代码。

琐碎示例:

public static class Helper
{
    // Helper methods
}

让这个类成为一个单独DLL的一部分(为了示例起见,让我们称之为Common)。然后在Core和Activities项目中,添加对Common项目/DLL的引用,并根据需要添加适当的using Common;语句。

现在,Core和Activities都可以使用Common中的对象,而不必a)具有对另一个程序集的引用(这可能会引入紧密耦合)或b)Core和Activity中都存在重复代码。

它还使维护公共代码变得更容易,因为只有一个地方可以更改,而不是两个地方。如果将来添加新程序集,它们也可以根据需要使用公共DLL。

如果有其他可能的外部代码将使用这些类,则不能在单独的程序集中复制这些类。如果类或枚举定义了两次,即使它们完全相同,CLR也会将它们视为两种完全不同的类型。

对我来说,如果你有一个名为"核心"的程序集,那么这个程序集应该有将被其他程序集使用的代码,所以我不明白为什么它们不能在核心中定义,并且有引用核心的活动。

如果这是不可接受的,您可能需要重命名core,并将重用的代码放置在单独的程序集中。然后,可以在两个现有程序集中引用该程序集,但不能强制它们相互引用。