0

我正在使用tracker-enabled-dbcontext并使用文档来捕获数据库审计日志,配置我们需要使用的跟踪

EntityTracker
.TrackAllProperties<NormalModel>()
.Except(x => x.Description)
.And(x => x.Id);

我有多个模型类,所以我决定动态控制配置。所以我需要使用命名空间检索模型类并将其传递给 TrackAllProperties 方法。

我试着喜欢这个,

Type test = Type.GetType("Mark.Domain.assets.AssetsSettings");
TrackerEnabledDbContext.Common.Configuration.EntityTracker.TrackAllProperties<test>();

但它不接受“测试”类型

这是 TrackAllProperties 方法。我不允许修改以下方法

public static TrackAllResponse<T> TrackAllProperties<T>()
    {
        OverrideTracking<T>().Enable();

        var allPublicInstanceProperties = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        //add high priority tracking to all properties
        foreach (var property in allPublicInstanceProperties)
        {
            Func<PropertyConfiguerationKey, TrackingConfigurationValue, TrackingConfigurationValue> factory =
                (key,value) => new TrackingConfigurationValue(true, TrackingConfigurationPriority.High);

            TrackingDataStore.PropertyConfigStore.AddOrUpdate(
                new PropertyConfiguerationKey(property.Name, typeof (T).FullName),
                new TrackingConfigurationValue(true, TrackingConfigurationPriority.High),
                factory
                );
        }

        return new TrackAllResponse<T>();
    }

我怎样才能完成这项任务

4

1 回答 1

0

要传递泛型类型,请尝试以下代码:

TrackerEnabledDbContext.Common.Configuration.EntityTracker.TrackAllProperties<Mark.Domain.assets.AssetsSettings>();

泛型类型参数T应该是实际的模型类而不是模型类的类型对象。它与声明 a 的结构相同List<string>- 您不必为字符串获取类型对象。

更新:

作为对您的评论的回应,这里有一些代码,您可以尝试使其与变量一起使用,但我不推荐这种方法。您可以在此处阅读有关 Invoke 调用的更多信息。它可能需要修改以适合您的应用程序。同样,我不推荐这种方法。

var method = typeof(TrackerEnabledDbContext.Common.Configuration.EntityTracker).GetMethod("TrackAllProperties");
var trackMethod = method.MakeGenericMethod(test); // your type variable
trackMethod.Invoke(TrackerEnabledDbContext.Common.Configuration.EntityTracker, null);
于 2022-01-26T04:44:05.067 回答