我有一个名为 IAuditable 的接口,如下所示:
public interface IAuditable
{
string AuditSummary
{
get;
}
string AuditDetails
{
get;
}
}
AuditTrail 类中的两个通用方法如下:
public T GetActualOldValue<T>() where T : IAuditable
{
return FromXElement<T>(OldValue);
}
public T GetActualNewValue<T>() where T : IAuditable
{
return FromXElement<T>(NewValue);
}
以及我有一个属性可以通过在运行时获取一个类来返回审计摘要,如下所示:
public string AuditSummary
{
get
{
if (HasNewValue || HasOldValue)
{
string libraryVal = GetLibraryValue();
Assembly assembly = Assembly.Load(libraryVal);
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
if (type.FullName.EndsWith("." + ClassName))
{
/*Here i want to call GetActualNewValue<foundClass>().AuditSummary
* or GetActualOldValue<foundClass>().AuditSummary;
*/
}
}
}
}
return "";
}
}
如您所知,我们可以在运行时在特定库中找到类,请注意我不想在运行时调用泛型方法,只想调用带有创建的泛型方法,换句话说,我如何将特定类传递给 GetActualNewValue <...>() 作为 T,
AuditTrail auditTrail = AuditTrail.GetAuditTrail(76);
string summmary = auditTrail.GetActualOldValue<DTClient>().AuditSummary;
string details = auditTrail.GetActualOldValue<DTClient>().AuditDetails;
此代码完美运行,但主要问题是 DTClient 必须在运行时找到并将 GetActualValue 定义为 T。
谢谢大家。