警告
若要使用提供的迁移方法,在遵循本指南之前,不得删除策略的旧实现。
- 若要迁移自定义策略,首先应创建一个新类,该类使用相同的方法,但继承自
CheckinPolicyBase
类(IPolicyCompatibilityJson
用于IPolicyCompatibility
),而不是继承PolicyBase
。 例子:
已过时
[Serializable]
public class Simple : PolicyBase
{
public override string Description => "SimplePolicyDescription";
...
}
更新
[Serializable]
public class SimpleNew : CheckinPolicyBase
{
public override string Description => "SimplePolicyDescription";
...
}
- 如果
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
};
}
...
}
- 引入了新的方法:
GetCheckinClientPoliciesForServerPaths
/GetCheckinClientPolicies
/SetCheckinClientPolicies
,而不是旧的方法如GetCheckinPoliciesForServerPaths
/GetCheckinPolicies
/SetCheckinPolicies
。 例如,当前此包中的LoadPolicies
方法的默认行为是,如果有新的策略则使用新的策略,如果没有则使用已过时的策略。
注释
如果不打算使用 NuGet 包提供的迁移方法,可以省略进一步的说明,并删除过时的策略,你已完成,恭喜!
- 对于您的已过时策略,添加
IPolicyMigration
(此接口被标记为已弃用,以表明它将与PolicyBase
和IPolicyCompatibility
一起作为不必要的接口被移除)。
警告
迁移过程中,将会跳过不继承此接口的过时策略,而且不会将它们保存为新策略。
- 在提到的接口中实现
ToNewPolicyType
。 它应返回基于当前修改的策略的新创建的策略类的实例。 示例:
[Serializable]
public class Simple : PolicyBase, IPolicyMigration
{
...
public CheckinPolicyBase ToNewPolicyType()
{
return new SimpleNew();
}
}
- 调用
MigrateFromOldPolicies
方法。
你已完成,恭喜!