gpt4 book ai didi

c# - 静态通用构建器

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:58 24 4
gpt4 key购买 nike

我正在尝试为我的类(class)实现类似 Asp Net Core 的静态构建器。这就是我要说的。在Asp Net Core 中的应用Startup方法 BuildWebHostWebHost创建 IWebHostBuilder :

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();

我对 UseStartup<Startup>() 感兴趣方法,所以我想知道这个方法如何“理解”什么 Startup它必须使用的类?此方法的签名是:

public static IWebHostBuilder UseStartup<TStartup>(this IWebHostBuilder hostBuilder) 
where TStartup : class;

在我的应用程序中我想使用类似的方法,例如这里我有一个简单的空接口(interface) ICleaner ,由一些 Cleaner 实现类,然后我有 CleanerBuilder类,负责添加适当的 Cleaner类到列表,配置它们并在 Build 之后运行它们方法。这是我的 CleanerBuilder 类。这是我的 CleanerBuilder 类:

public class CleanerBuilder
{
private List<ICleaner> _activeCleaners { get; set; }

private CleanerBuilder() { }

public static CleanerBuilder CreateDefaultBuilder(string[] args)
{
var cleanerBuilder = new CleanerBuilder();
/*
* ...
*/
return cleanerBuilder;
}

public CleanerBuilder UseCleaner<ICleaner>()
{
_activeCleaners.Add(???);

return this;
}

public void Build()
{
foreach(var cleaner in _activeCleaners)
{
cleaner.Run();
}
}
}

用法是:

CleanerBuilder.CreateDefaultBuilder(args)
.UseCleaner<TempCleaner>()
.Build();

现在我不知道在 UseCleaner 中该做什么方法。

最佳答案

最简单的实现可能是这样的:

    public CleanerBuilder UseCleaner<TCleaner>() where TCleaner : ICleaner, class, new
{
_activeCleaners.Add(new TCleaner());

return this;
}

但是,您在这里真的什么也得不到:

public CleanerBuilder UseCleaner(ICleaner cleaner)
{
_activeCleaners.Add(cleaner);

return this;
}

通用版本在这个简单版本中受到更多限制,因为它必须有一个空构造函数。不酷,也许还没有。微软对其 StartUp 所做的是将它连接到它的依赖注入(inject)容器并尝试从那里构建它。这就解决了构造函数参数的问题。

如果您将 Visual Studio 配置为下载源代码,只需在 UseStartup 方法上按 F12 即可查看它们在其中执行的操作。或者,您可以在 source 中查找.

关于c# - 静态通用构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49401662/

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