-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathResourceActivityBindingResolverFactory.cs
More file actions
57 lines (47 loc) · 1.79 KB
/
ResourceActivityBindingResolverFactory.cs
File metadata and controls
57 lines (47 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright (c) 2026 Phoenix Contact GmbH & Co. KG
// Licensed under the Apache License, Version 2.0
using System.Reflection;
using Moryx.AbstractionLayer.Activities;
using Moryx.AbstractionLayer.Resources;
using Moryx.Bindings;
namespace Moryx.ProcessData.Adapter.ProcessEngine;
internal class ResourceActivityBindingResolverFactory : ActivityBindingResolverFactory
{
private readonly IResourceManagement _resourceManagement;
public ResourceActivityBindingResolverFactory(IResourceManagement resourceManagement)
{
_resourceManagement = resourceManagement;
}
protected override IBindingResolverChain CreateBaseResolver(string baseKey)
{
return baseKey switch
{
"Resource" => new TracingResourceResolver(_resourceManagement),
_ => base.CreateBaseResolver(baseKey)
};
}
}
internal class TracingResourceResolver : BindingResolverBase
{
private readonly IResourceManagement _resourceManagement;
public TracingResourceResolver(IResourceManagement resourceManagement)
{
_resourceManagement = resourceManagement;
}
protected override object Resolve(object source)
{
var tracing = ((Activity)source).Tracing.Transform<Tracing>();
if (tracing == null)
return null;
var proxy = _resourceManagement.GetResource<IResource>(tracing.ResourceId);
// Dirty hack to extract target
var property = proxy.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
.FirstOrDefault(p => p.Name == "Target");
var resource = (IResource)property.GetValue(proxy);
return resource;
}
protected override bool Update(object source, object value)
{
throw new System.NotImplementedException();
}
}