Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该把转换时间函数放在哪里,以便在多个控制器中访问它?_C#_Asp.net_Class_Asp.net Mvc 4 - Fatal编程技术网

C# 我应该把转换时间函数放在哪里,以便在多个控制器中访问它?

C# 我应该把转换时间函数放在哪里,以便在多个控制器中访问它?,c#,asp.net,class,asp.net-mvc-4,C#,Asp.net,Class,Asp.net Mvc 4,我有一个这样的函数来转换日期时间 private static string ToRelativeDate(DateTime dateTime) { var timeSpan = DateTime.Now - dateTime; if (timeSpan <= TimeSpan.FromSeconds(60)) return timeSpan.Seconds > 5 ? string.Format("{0} s

我有一个这样的函数来转换日期时间

    private static string ToRelativeDate(DateTime dateTime)
    {
        var timeSpan = DateTime.Now - dateTime;

        if (timeSpan <= TimeSpan.FromSeconds(60))
            return timeSpan.Seconds > 5 ? string.Format("{0} sekunder sedan", timeSpan.Seconds) : "Precis nu";

        if (timeSpan <= TimeSpan.FromMinutes(60))
            return timeSpan.Minutes > 1 ? String.Format("{0} minuter sedan", timeSpan.Minutes) : "minut sedan";

        if (timeSpan <= TimeSpan.FromHours(24))
            return timeSpan.Hours > 1 ? String.Format("{0} timmar sedan", timeSpan.Hours) : "timme sedan";

        if (timeSpan <= TimeSpan.FromDays(30))
            return timeSpan.Days > 1 ? String.Format("{0} dagar sedan", timeSpan.Days) : "igår";

        if (timeSpan <= TimeSpan.FromDays(365))
            return timeSpan.Days > 30 ? String.Format("{0} månader sedan", timeSpan.Days / 30) : "månad sedan";

        return timeSpan.Days > 365 ? String.Format("{0} år sedan", timeSpan.Days / 365) : "år sedan";
    }
私有静态字符串到相对日期(DateTime DateTime)
{
var timeSpan=DateTime.Now-DateTime;
if(timeSpan 5?string.Format(“{0}sekunder sedan”,timeSpan.Seconds):“Precis nu”;
if(timeSpan 1?String.Format(“{0}minuter sedan”,timeSpan.Minutes):“minut sedan”;
if(timeSpan 1?String.Format(“{0}timmar sedan”,timeSpan.Hours):“timme sedan”;
if(timeSpan 1?String.Format(“{0}dagar sedan”,timeSpan.Days):“igår”;
if(timeSpan 30?String.Format(“{0}månader sedan”,timeSpan.Days/30):“månad sedan”;
返回timeSpan.Days>365?String.Format(“{0}r sedan”,timeSpan.Days/365):“r sedan”;
}

我现在使用ut的控制器中有它,但我需要在多个控制器中使用它。我应该把它放在哪里(不想复制我的代码)我该怎么称呼它呢?我猜它应该在一个单独的类中,但是在哪里呢?我的文件结构是一个标准的asp.net MVC项目。

这是一个意见问题,也是一个您希望在多大范围内共享此代码的问题

最简单的选择是将其放入另一个类中。在MVC项目中,您可以选择将此文件放在任何位置,但约定建议您将其放入“模型”文件夹中,或者,由于严格来说它不是模型而是实用程序函数,您可以为“实用程序”代码创建一个新文件夹。该类可能如下所示:

public class DateUtils
{
  public static string ToRelativeDate(DateTime dateTime)
  {
    //your code here
  }
}
然后在控制器中,您可以简单地编写:

string result = DateUtils.ToRelativeDateTime(myDateTimeVar);
(注意:如果将类放在与控制器不同的命名空间中,则需要在控制器类的顶部包含命名空间,并使用
using
语句。)

例如,如果您想更广泛地共享此功能和其他通用功能,以便在其他应用程序中轻松重用,您可以为其创建一个完全独立的VS项目,然后将其包含在解决方案中,并在MVC项目中引用。这样,您可以在将来的其他解决方案中包含相同的功能没有复制文件

我建议的最后一个选项是将该项目编译成一个NuGet包(您可以在NuGet.org上在线共享给世界,也可以只共享一个内部文件供您自己/您的团队使用)。这样,如果需要,您可以在不同的解决方案中维护多个版本(并且在不影响其他开发工作的情况下开发新版本),此外,它还为您提供了一种简单的方法来管理如何在应用程序中包含可重用代码


无论您处于何种规模,代码重用的概念基本上是相同的——您将代码抽象并分离到您认为可能使用的所有场景所需的级别,然后使用最简单的方法(安全地)共享代码联系所有可能需要它的人。您的目标是编写一次,并在源代码管理中的一个位置对其进行维护/版本设置,而无需在该位置复制/粘贴多个相同的文件。

将该功能转换为可注入和重用的服务

public interface IRelativeDateConverter {
    string ToRelativeDate(DateTime dateTime);
}

public class RelativeDateConverter : IRelativeDateConverter {
    public string ToRelativeDate(DateTime dateTime) {
        //...code removed for brevity
    }
}
使用DI,现在可以在需要时注入和重用服务

public class MyController : Controller {
    private readonly IRelativeDateConvetrer converter;
    public MyController(IRelativeDateConvetrer converter) {
        this.converter = converter;
    }

    //...other code removed for brevity

    public ActionResult MyAction(DateTime value) {
        var relativeDate = converter.ToRelativeDate(value);
        //...other code removed for brevity
    }
}

要重用代码,您手头有多种技术,作为所有imho中最简单的扩展方法:

   public static class ReusableCode
    {    
       private static string ToRelativeDate(this DateTime dateTime)
       {
          //Implementation
       }
    }
用法:

class Class1{
    void Method1(){
        var dateConverted = myDateTime.ToRelativeDate()
    }    
}