如何在C#中做一个时间记录器类包装器

时间:2016-08-17 11:56:45

标签: c# inheritance logging time fluent-migrator

我有很多(大约一千个)FluentMigrator Migration个类开始在我们的构建服务器上超时。

对于那些没有使用FluentMigrator的人 - 迁移的工作方式使您的所有迁移都从Migration类继承,该类具有Up()Down()方法为db迁移运行SQL脚本 - 简单易行。

现在我很懒,我引入了一个LoggingMigration类来记录迁移开始运行的时间(并在VS中为该项目简单地将: Migration替换为: LoggingMigration。)

public class LoggingMigration : Migration
{
    public DateTime StartTime { get; private set; }

    public LoggingMigration()
    {
        this.StartTime = DateTime.Now;
        Console.WriteLine("Start {0} - TIME: {1:yyyy-MM-dd HH:mm:ss.fff}", this.GetType().Name, StartTime);
    }

    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

我还希望了解迁移运行的时间,以便更轻松地查看哪些迁移需要很长时间。

我正在考虑使用析构函数,如:

    ~LoggingMigration()
    {
        Console.WriteLine("End(?) {0} - TIME: {1}", this.GetType().Name, DateTime.Now.Subtract(StartTime));
    }

但事情只是volatile and unpredictable

如何添加在子类完成后Up()方法之后运行的机制? 或者其他一些方式来完成这项工作?

2 个答案:

答案 0 :(得分:1)

如何覆盖受保护的方法而不是公共方法:

<h1 [innerHTML]="date ? (date | date) : '<i>Date not set</i>'"></h1>

答案 1 :(得分:-1)

为迁移类创建装饰器。 它看起来像是:

<Storyboard x:Key="OpacityUpAnim">
        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:1.3">
            <DoubleAnimation.EasingFunction>
                <CubicEase EasingMode="EaseOut" />
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
</Storyboard>

装饰者模式的例子: http://www.dofactory.com/net/decorator-design-pattern