[英]C# Func<> Delegate property setter issue
I am trying to return an object of type IDocumentTemplateProvider using a delegate as below: 我试图使用委托返回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(); }
}
}
However when I'm calling it using: 但是,当我使用时调用它:
private static readonly IDocumentTemplateProvider _template = DocumentTemplateProvider.TemplateProvider;
_template is always null. _template始终为null。 I'm fairly new to C# Func<> delegates so i can't bloody see what I'm doing wrong. 我是C#Func <>代表的新手,所以我不能看到我做错了什么。 Can someone point me to the right direction? 有人能指出我正确的方向吗?
Thanks 谢谢
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()
{
}
}
It is null because it is has never been set. 它为null,因为它从未设置过。 You have two Void methods that set the _docTemplateProvider variable, so you need to call them first, like the example code below 你有两个Void方法设置_docTemplateProvider变量,所以你需要先调用它们,就像下面的示例代码
class Program
{
private static void Main()
{
DocumentTemplateProvider.SetDocTemplateProvider<Test>();
//OR
DocumentTemplateProvider.SetdocTemplateProvider(() => new Test());
IDocumentTemplateProvider _template = DocumentTemplateProvider.TemplateProvider;
Console.ReadLine();
}
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(); }
}
}
}
internal interface IDocumentTemplateProvider
{
}
public class Test : IDocumentTemplateProvider
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.