gpt4 book ai didi

C# Func<> Delegate property setter 问题

转载 作者:行者123 更新时间:2023-11-30 17:43:23 26 4
gpt4 key购买 nike

我正在尝试使用如下委托(delegate)返回类型为 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 始终为空。我是 C# Func<> 代表的新手,所以我看不出我做错了什么。有人能指出我正确的方向吗?

谢谢

更新:为了清除 ant 混淆,我添加了完整代码,其中 _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()
{
}
}

最佳答案

它是空的,因为它从未被设置过。您有两个设置 _docTemplateProvider 变量的 Void 方法,因此您需要先调用它们,如下面的示例代码

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
{
}

关于C# Func<> Delegate property setter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com