抱歉给您带来新手问题。您想学习依赖注入,所以尝试模拟了一个简单的示例。
这是一个基于 .Net6 的控制台应用程序,包含两个主要文件:Program.cs 和 Application.cs。
在 Program.cs 中:
using DependencyInjectionDemo.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
Console.WriteLine("Hello, World!");
IHost _host = Host.CreateDefaultBuilder().ConfigureServices(
services => {
services.AddSingleton<IApplication, Application>();
})
.Build();
var app = _host.Services.GetRequiredService<IApplication>();
app.TestRun();
此部分创建了一个默认主机,并将 Application
类型作为 IApplication
接口的单例服务注册到服务容器中。然后从服务容器获取 IApplication
实例并调用其 TestRun
方法。
在 Application.cs 中:
using Microsoft.Extensions.Logging;
// ... 其他命名空间省略
namespace DependencyInjectionDemo.Services
{
internal interface IApplication
{
void TestRun();
}
internal class Application : IApplication
{
private readonly ILogger<Application> _logger;
public Application(ILogger<Application> logger)
{
_logger = logger;
}
public void TestRun()
{
_logger.LogInformation("Logging from the Application classssssssssssss!");
Console.WriteLine("Hello, World from the Application class!");
}
}
}
这里定义了 IApplication
接口和其实现类 Application
,其中 TestRun
方法使用日志记录功能输出一条消息。
现在您希望创建一个新的 Test
类,并从该类中调用 Application
类的 TestRun
方法。
修改后的 Test.cs:
namespace DependencyInjectionDemo.Services
{
internal interface ITest
{
void CallTestRun();
}
internal class Test : ITest
{
private IApplication _app;
public Test(IApplication app)
{
_app = app;
}
public void CallTestRun()
{
Console.WriteLine("Hello, World from the Test class!");
_app.TestRun();
}
}
}
在此版本中,您创建了一个新的 ITest
接口和实现类 Test
,并在构造函数中注入 IApplication
以供调用其 TestRun
方法。
最后,在 Program.cs 中进行相应修改:
Console.WriteLine("Hello, World!");
IHost _host = Host.CreateDefaultBuilder().ConfigureServices(
services => {
services.AddSingleton<IApplication, Application>();
services.AddSingleton<ITest, Test>();
})
.Build();
var app = _host.Services.GetRequiredService<IApplication>();
app.TestRun();
var test = _host.Services.GetRequiredService<ITest>();
test.CallTestRun();
我担心日志输出的顺序不正确...
