-2

我正在研究 .NET Core。

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

CreateHostBuilder方法返回IHostBuilder接口并调用该Build方法。那么是否可以在该接口内实现代码或者它是任何设计模式?

4

2 回答 2

0

该类不是密封的,但 Build 不是虚拟的,因此扩展它有点挑战。但是您始终可以包装对象并在包装器中实现接口,通过控制或覆盖或扩展您想要的任何行为。

public class MyHostBuilder : IHostBuilder
{
    protected readonly IHostBuilder _inner;

    public MyHostBuilder(IHostBuilder inner)
    {
        _inner = inner;
    }

    public IHost Build()
    {
        DoSomethingCustom();
        return _inner.Build();          //Do something custom then pass through
    }

    public void ConfigureContainer<TContainerBuilder>(Action<HostBuilderContext,TContainerBuilder> action)
    {
        _inner.ConfigureContainer(action);  //Pass through without extending
    }
}        
于 2019-12-01T05:55:24.757 回答
0

CreateHostBuilder 方法返回类型在该返回类型上实现接口 IHostBuilder 和 Build 方法被调用。

于 2019-12-01T05:43:09.077 回答