有没有办法在重新托管的工作流设计器中使用guid进行系统活动?
我希望为我创建的每个活动以及所提供的系统(分配,换取,切换等)提供GUID。
我已经读过IAttachedPropertyStore是要走的路,但我认为没有系统提供的活动实现这些。 http://blogs.msdn.com/b/bursteg/archive/2009/05/18/xaml-in-net-4-0-attached-properties-iattachedpropertystore-and-attachablepropertyservices.aspx
欢迎任何建议或想法。这些guid是将这些流导入其他工具并能够修改它们所必需的。
请询问是否需要任何其他信息才能回答这个问题。
答案 0 :(得分:0)
如果你需要的只是从Activity到Guid的1:1地图,请考虑只散列程序集合格的名称。有了这么少的输入,我猜你不会在16字节的哈希中得到冲突。
var targetAssemblies = new[] { typeof(Activity).Assembly };
var knownActivities = new Dictionary<Guid, Type>();
var baseType = typeof(Activity);
var sha1 = new SHA1CryptoServiceProvider();
foreach (var t in targetAssemblies.SelectMany(a => a.GetTypes()))
{
if (t.IsPublic && !t.IsAbstract && baseType.IsAssignableFrom(t))
{
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(t.AssemblyQualifiedName));
// hash is 20 bytes long, we are truncating it to 16 to fit the guid
var guidData = new byte[16];
Buffer.BlockCopy(hash, 0, guidData, 0, 16);
var typeGuid = new Guid(hash.Take(16).ToArray());
if (knownActivities.ContainsKey(typeGuid))
{
throw new InvalidOperationException("Collision");
}
knownActivities.Add(typeGuid, t);
}
}