我正在尝试使用委托返回一个类型为IDocumentTemplateProvider的对象,代码如下:
然而,当我使用以下方式进行调用时:
public static class DocumentTemplateProvider
{
private static Func<IDocumentTemplateProvider> _docTemplateProvider;
public static void SetdocTemplateProvider(Func<IDocumentTemplateProvider> docTemplateProvider)
{
_docTemplateProvider = docTemplateProvider;
}
public static void SetDocTemplateProvider<T>() where T : IDocumentTemplateProvider, new()
{
_docTemplateProvider = () => new T();
}
public static IDocumentTemplateProvider TemplateProvider
{
get { return _docTemplateProvider(); }
}
}
然而,当我使用以下方式进行调用时:
private static readonly IDocumentTemplateProvider _template = DocumentTemplateProvider.TemplateProvider;
_template 总是为 null。我对 C# 中的 Func<> 委托还比较新,所以我无法看出自己做错了什么。有人能指点我正确的方向吗?
谢谢
更新:为了消除任何困惑,我已经添加了完整的代码,其中 _template 被初始化并按原样使用:
public class DocumentModule : IHttpModule
{
private static readonly IDocumentTemplateProvider _template = DocumentTemplateProvider.TemplateProvider;
public void Init(HttpApplication context)
{
context.BeginRequest += OnBeginRequest;
context.EndRequest += OnEndRequest;
}
public void Init(HttpApplication context)
{
context.BeginRequest += OnBeginRequest;
context.EndRequest += OnEndRequest;
}
private void OnBeginRequest(object sender, EventArgs eventArgs)
{
_template.SetProvider();
}
private void OnEndRequest(object sender, EventArgs e)
{
_template.Finalize();
}
public void Dispose()
{
}
}
static readonly
字段)应该会在类型实例化期间引发异常,而该类型应该已经死亡了...绝对是一个有趣的问题,但也绝对不是实际的问题(我假设你真的没有计划编写依赖于静态初始化随机顺序的代码)。 - Alexei Levenkov