【发布时间】:2018-04-10 10:34:21
【问题描述】:
我有以下示例 TFS 签入策略:
[Serializable()]
public class AuditControlsPolicy : PolicyBase
{
public List<string> list;
public AuditControlsPolicy() : base()
{
list = new List<string>() { "a", "b", "c" };
System.Windows.Forms.MessageBox.Show("in constructor");
}
public override string Description
{
get { return "my description"; }
}
public override string Type
{
get { return "my policy"; }
}
public override string TypeDescription
{
get { return "description"; }
}
public override string InstallationInstructions
{
get { return "install instructions"; }
}
public override Microsoft.TeamFoundation.VersionControl.Client.PolicyFailure[] Evaluate()
{
List<PolicyFailure> policyFailures = new List<PolicyFailure>();
if (list == null)
System.Windows.Forms.MessageBox.Show("list is null");
else
System.Windows.Forms.MessageBox.Show(String.Join(",", list.ToArray()));
return policyFailures.ToArray();
}
public override void DisplayHelp(PolicyFailure failure)
{
MessageBox.Show("No help available at this time");
}
public override void Activate(PolicyFailure failure)
{
MessageBox.Show(failure.Message);
}
protected override void OnPolicyStateChanged(PolicyFailure[] failures)
{
base.OnPolicyStateChanged(failures);
}
public override void Initialize(IPendingCheckin pendingCheckin)
{
base.Initialize(pendingCheckin);
pendingCheckin.PendingChanges.CheckedPendingChangesChanged += PendingCheckinCheckedPendingChangesChanged;
}
public override void Dispose()
{
PendingCheckin.PendingChanges.CheckedPendingChangesChanged -= PendingCheckinCheckedPendingChangesChanged;
base.Dispose();
}
private void PendingCheckinCheckedPendingChangesChanged(object sender, EventArgs e)
{
OnPolicyStateChanged(Evaluate());
}
public override bool Edit(IPolicyEditArgs policyEditArgs)
{
return true;
}
}
它已正确注册并“工作”——但是,当调用 Evaluate 方法时,实例成员字段 list 似乎没有初始化。
当我在 Visual Studio 中切换到 Pending Changes 视图时,至少有一个待定更改,我多次收到“In Constructor”消息框。这后面是“list is null”,即使我在实例构造函数中清楚地初始化了该字段。如果我将我的list 声明为静态并在实例构造函数中对其进行初始化,那么它会显示我的值列表。
看起来好像 Visual Studio 正在对静态对象调用 Evaluate 方法,即使它没有这样声明。
Evaluate 方法是否作为静态方法调用?我是否遗漏了一些关于我应该如何构建策略对象的内容?
【问题讨论】:
标签: visual-studio tfs