嘗試從WCF服務調用方法時出現類型初始化錯誤。字典初始化時出現異常
'X.Y.Z.AuditService'的類型初始值設定項引發異常。
但是,我看不到任何會導致異常的代碼。
public enum AuditProcessType
{
Facility,
Patient,
Report,
}
[ServiceBehavior(Name = "AuditService",
Namespace = "http://xyz/services/2008/08",
InstanceContextMode = InstanceContextMode.PerSession,
ConcurrencyMode = ConcurrencyMode.Single)]
public class AuditService : IAuditServiceContract
{
private static Dictionary<AuditProcessType, Func<IAuditor>> auditServiceFactories;
static AuditService()
{
auditServiceFactories = new Dictionary<AuditProcessType, Func<IAuditor>>()
{
{ AuditProcessType.Facility,() => Auditor<Facility>.Instance },
{ AuditProcessType.Patient,() => Auditor<Patient>.Instance },
{ AuditProcessType.Report,() => Auditor<Report>.Instance },
};
}
// ...
private static IAuditor GetAuditor(AuditProcessType process)
{
Func<IAuditor> factory;
if (!auditServiceFactories.TryGetValue(process, out factory) || factory == null)
{
throw new ArgumentException(..., "process");
}
IAuditor auditor = null;
try
{
auditor = factory();
}
catch (Exception ex)
{
throw new InvalidOperationException(..., ex);
}
if (auditor == null)
{
throw new InvalidOperationException(...);
}
return auditor;
}
}
public class Auditor<T> : IAuditor
{
private static Auditor<T> _instance = new Auditor<T>();
public static Auditor<T> Instance
{
get
{
return _instance;
}
}
private Auditor()
{
}
// ...
}
我的日誌記錄框架沒有顯示任何內部異常的細節,所以我不能得到比這更多的信息。不管我嘗試過什麼,我似乎都無法讓VS調試器在類型初始化器中停止。不過,我不明白這段代碼是如何引發異常的。我的代碼本身並沒有做什麼,只是初始化工廠字典,它甚至不會調用AuditService<T>.Instance
。還有什麼可能導致這種情況?
有關詳細信息,您可以將「Auditor .Instance」屬性的代碼放入try catch塊。同時在debuger posible switchou一些屬性幫助。 –
gabba
2013-02-26 17:44:15
在'AuditService'上,你是否也有非靜態構造函數? – 2013-02-26 17:46:58
@DanielHilgarth不,我不知道。 – 2013-02-26 17:47:32