WCFサービスからメソッドを呼び出そうとすると、型の初期化エラーが発生します。
'XYZAuditService'の型初期化子が例外をスローしました。
ただし、例外の原因となるコードには何も表示されません。
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
。他に何がこれを引き起こしている可能性がありますか?