迁移自定义签入策略

警告

若要使用提供的迁移方法,在遵循本指南之前,不得删除策略的旧实现。

  1. 若要迁移自定义策略,首先应创建一个新类,该类使用相同的方法,但继承自 CheckinPolicyBase 类(IPolicyCompatibilityJson 用于 IPolicyCompatibility),而不是继承 PolicyBase。 例子:

已过时

    [Serializable]
    public class Simple : PolicyBase
    {
       public override string Description => "SimplePolicyDescription";
       ...
    }

更新

    [Serializable]
    public class SimpleNew : CheckinPolicyBase
    {
        public override string Description => "SimplePolicyDescription";
        ...
    }
  1. 如果 GetBinaryFormatter 被重写,那么也需使用相同的逻辑来实现 GetJsonSerializerSettings 以便进行序列化操作。 示例:

已过时

    [Serializable]
    public class Simple : PolicyBase
    {
        public override BinaryFormatter GetBinaryFormatter()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Binder = new SimpleBinder();
            return formatter;
        }
        ...
    }

更新

    [Serializable]
    public class SimpleNew : CheckinPolicyBase
    {
        public override JsonSerializerSettings GetJsonSerializerSettings()
        {
            return new JsonSerializerSettings()
            {
                SerializationBinder = new SimpleNewSerializationBinder(),
                TypeNameHandling = TypeNameHandling.Objects
            };
        }
        ...
    }
  1. 引入了新的方法:GetCheckinClientPoliciesForServerPaths/GetCheckinClientPolicies/SetCheckinClientPolicies,而不是旧的方法如GetCheckinPoliciesForServerPaths/GetCheckinPolicies/SetCheckinPolicies。 例如,当前此包中的 LoadPolicies 方法的默认行为是,如果有新的策略则使用新的策略,如果没有则使用已过时的策略。

注释

如果不打算使用 NuGet 包提供的迁移方法,可以省略进一步的说明,并删除过时的策略,你已完成,恭喜!

  1. 对于您的已过时策略,添加 IPolicyMigration(此接口被标记为已弃用,以表明它将与 PolicyBaseIPolicyCompatibility 一起作为不必要的接口被移除)。

警告

迁移过程中,将会跳过不继承此接口的过时策略,而且不会将它们保存为新策略。

  1. 在提到的接口中实现 ToNewPolicyType 。 它应返回基于当前修改的策略的新创建的策略类的实例。 示例:
    [Serializable]
    public class Simple : PolicyBase, IPolicyMigration
    {
        ...
        public CheckinPolicyBase ToNewPolicyType()
        {
            return new SimpleNew();
        }
    }
  1. 调用 MigrateFromOldPolicies 方法。

你已完成,恭喜!