繁体   English   中英

系统在C#中提供的工作流活动的GUID

[英]GUID for System provided workflow activities in C#

在重新托管的工作流设计器中是否有办法指导系统活动?

我想为我创建的每个活动以及所提供的系统(分配,用于,切换等)提供一个GUID。

我读过IAttachedPropertyStore是要走的路,但是我所提供的活动都无法实现这些系统。 http://blogs.msdn.com/b/bursteg/archive/2009/05/18/xaml-in-net-4-0-attached-properties-iattachedpropertystore-and-attachablepropertyservices.aspx

欢迎任何建议或想法。 这些指导是将这些流导入其他工具并能够对其进行修改所必需的。

请问是否需要其他任何信息来回答此问题。

如果您需要的只是从Activity到Guid的1:1映射,请考虑仅对Assembly Qualified名称进行哈希处理。 有了这么少的输入,我想不到您会在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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM