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

C# 如何在插件环境中正确使用枚举和/或自定义对象,c#,C#,我有一个问题,我正在努力解决,但无法解决,所以如果可能的话,我会寻求您的帮助 我正在对一个项目进行重构,该项目最终有三个项目 核心 框架业务和数据逻辑 基于插件的活动 我试图避免发生的是交叉引用活动和核心项目。 因为曾经是核心逻辑的一部分的类现在在Activities项目中,所以我必须复制某些东西,比如枚举和助手类 这就引出了我的问题: 我有一个类的引用,它最初在我的核心中,它在我的核心中也是需要的。但是我的活动项目中也使用了该类,但是如果没有对我的核心项目的引用,就找不到该类。与在我的活动类中

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

我正在对一个项目进行重构,该项目最终有三个项目

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

我试图避免发生的是交叉引用活动和核心项目。 因为曾经是核心逻辑的一部分的类现在在Activities项目中,所以我必须复制某些东西,比如枚举和助手类

这就引出了我的问题:

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

所以为了避免在我的活动中引用我的核心项目,可以在我的活动项目中复制这些类和枚举吗?如果没有,我的其他选择是什么

我希望这段代码尽可能正确。下周我的同龄人将对它进行研究

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


感谢

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

简单的例子:

public static class Helper
{

    // Helper methods
}
让这个类成为一个单独的DLL的一部分,为了这个例子,让我们称它为公共类。然后在核心和活动项目中,添加对公共项目/DLL的引用,并适当使用公共;根据需要发表声明

现在,核心和活动都可以共同使用对象,而不必a引用可能引入紧密耦合的另一个程序集,或者b在核心和活动中都存在重复的代码


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

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

简单的例子:

public static class Helper
{

    // Helper methods
}
让这个类成为一个单独的DLL的一部分,为了这个例子,让我们称它为公共类。然后在核心和活动项目中,添加对公共项目/DLL的引用,并适当使用公共;根据需要发表声明

现在,核心和活动都可以共同使用对象,而不必a引用可能引入紧密耦合的另一个程序集,或者b在核心和活动中都存在重复的代码


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

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

这对我来说是有意义的,如果你有一个称为core的程序集,那么这个程序集应该有其他程序集要使用的代码,所以我不理解为什么不能在core中定义它们,并让活动引用core


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

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

这对我来说是有意义的,如果你有一个称为core的程序集,那么这个程序集应该有其他程序集要使用的代码,所以我不理解为什么不能在core中定义它们,并让活动引用core


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

为什么不将核心程序集和活动程序集使用的所有对象移动到它们自己的程序集中呢。然后核心和活动可以引用同一个程序集,而不必引用
请你们适当地解释一下你们项目的意义好吗?你说有三个项目,但你只提到了两个。我们也不知道项目之间应该是什么关系。为什么不将核心和活动程序集使用的所有对象移动到它们自己的程序集中呢。那个么核心和活动可以引用同一个组件,而不必相互引用。你们能恰当地解释一下你们的项目的含义吗?你说有三个项目,但你只提到了两个。我们也不知道项目之间应该是什么样的关系。大家都说得很好。我相信我将创建另一个程序集并将它们加载到其中,并在两个项目中引用它。太好了!回答关于核心命名和使用的问题:我们最终想要的是洋葱设计:核心是中心框架,然后是外层,比如活动和其他只能与框架通信的东西,而不是核心或彼此。这有意义吗?我认为如果你有代码汇编,那么就不应该有不是.NET或第三方汇编的汇编核心引用。这会让人非常困惑。至少对我来说,我认为这些问题是程序集之间不恰当分离的明显标志,很可能是不恰当的OO设计。所以我肯定会深入挖掘,寻找这个问题背后的真正原因。这就是我们重构代码的原因。它已经3年了,需要重写。我们回去设计它,并有一个明确的道路,我们相信。最大的问题是在重构时不破坏当前的构建和使用。我们必须观察名称空间的变化和使用情况,同时实现更好的设计。痛苦,但最终它将是一个更好的设计。非常好的一点,大家。我相信我将创建另一个程序集并将它们加载到其中,并在两个项目中引用它。太好了!回答关于核心命名和使用的问题:我们最终想要的是洋葱设计:核心是中心框架,然后是外层,比如活动和其他只能与框架通信的东西,而不是核心或彼此。这有意义吗?我认为如果你有代码汇编,那么就不应该有不是.NET或第三方汇编的汇编核心引用。这会让人非常困惑。至少对我来说,我认为这些问题是程序集之间不恰当分离的明显标志,很可能是不恰当的OO设计。所以我肯定会深入挖掘,寻找这个问题背后的真正原因。这就是我们重构代码的原因。它已经3年了,需要重写。我们回去设计它,并有一个明确的道路,我们相信。最大的问题是在重构时不破坏当前的构建和使用。我们必须观察名称空间的变化和使用情况,同时实现更好的设计。很痛苦,但最终它会是一个更好的设计。Jay它只让我标出一个正确的答案,但是你的答案和Tim都很正确。谢谢你的时间和帮助。Jay它只允许我标出一个正确的答案,但是你和Tim的答案都很准确。谢谢你的时间和帮助。