正如标题所说,我有一个多项目解决方案。
我有一个“核心”项目,其中包含大多数其他项目。
所以我的问题是这个,我有一些实用函数,比如FormatPhoneNumber(..),我希望能够从以下任何地方以下列方式访问。
(在Project_B中取决于Core)
string str = FormatPhoneNumber(inputString);
在最坏的情况下,我想我可以使用某种限定符:
string str = util.FormatPhoneNumber(inputString);
答案 0 :(得分:4)
执行此操作的最佳方法是创建一个dll项目(可能称为“CommonCode”?),然后您可以从所有其他项目中引用此dll并访问其中的类和方法。
你必须在某处拥有某种“限定符”(就像你所说的那样),但要减少影响,请使用每个文件顶部的using语句,例如
using util;
答案 1 :(得分:1)
如果你真的必须有这样的实用功能(你知道,你不应该,但有时它是最好/最简单的解决方案),我建议将它们放在Core中(假设每个项目都依赖于Core) ),或在单独的实用程序集中。如果您不希望有单独的程序集,请考虑使用ILMerge。
限定符应该没问题。我建议不要将不相关的函数放入Utils
类,而是使用例如所有格式化函数的Formatting
类。另一方面,正如s_ruchit在此期间提出的那样,扩展方法(例如字符串类)也可以派上用场。
(我是否提到过§%$& MarkDown编辑器不允许在德语键盘布局上键入[at]符号,因为它会创建一个blockquote?叹气。)
答案 2 :(得分:1)
尝试创建自己的util库 创建一个类库项目并将您的util类放在那里。
我自己尝试遵守[companyName] .Util。[subdomain]等命名约定。 您的示例可能适合我的[CompanyName] .Utils.StringHelpers
然后,您将使用静态方法FormatPhoneNumber创建一个静态类StringHelper。 您将看到这些个人库迅速变大。通过对它们进行分组,如果只需要一部分函数,则不必加载所有代码。
答案 3 :(得分:1)
使用扩展方法可以更轻松地调用方法而不使用类名。
public static class Util {
public static string FormatPhoneNumber(this string input) {
:
}
}
该方法现在将出现在每个字符串对象上。你不需要知道它来自哪个类。但是,如果扩展类在另一个名称空间中声明,则仍必须导入名称空间。
string formattedString = inputString.FormatPhoneNumber();
答案 4 :(得分:0)
如果您使用的是C#3.0,则可以将它们全部绑定到一个静态类中,将它们用作扩展方法。
答案 5 :(得分:0)
.NET中没有全局函数,因此您必须将实用程序函数放入类中。您可以将方法设置为静态,因此无需实例化实用程序类即可调用它们:
public class Utility
{
public static string FormatPhoneNumber(string input)
{
...
}
}
// usage:
string output = Utility.FormatPhoneNumber(input);
将这些方法放入您的核心库或单独的实用程序库中,可供所有其他库和应用程序使用(引用)。
答案 6 :(得分:0)
您需要将函数放在静态类中。你无法避免资格认证(C#中没有全局函数):
<%= Formatters.PhoneNumber(rawData) %>
应该按照常规方法对效用函数进行分组:类似的方法组合在一起,不相关的方法应该进入不同的类(静态类的事件旨在实现低耦合和高内聚)。
每个所属的程序集应该是显而易见的:仅由表示层(ASP.NET项目本身)使用的格式化函数属于那里。真正的共同功能可以进入核心。
答案 7 :(得分:0)
如果您正在实现的功能只能在您的应用程序的上下文中使用,我建议您将它放入Core程序集(例如,在“Utils”之类的单独命名空间下)或应用程序的新DLL库中解。 只有当函数可以在多个项目中使用时,才有必要创建一个实用程序库。但请记住,实用程序库只有在定期维护时才有意义。
答案 8 :(得分:0)
如果您希望所有代码都访问这些方法,那么请使用扩展方法,否则我将使用核心程序集中的Util类。
FWIW,如果您使用更正式的命名空间作为boris sugguests(建议避免冲突),您可以使用using关键字缩写:
using Util = [CompanyName].Utils.StringHelpers;
我倾向于关注DRY principle并在我需要的时候创建一个别名。