实例代码:
using Microsoft.Extensions.DependencyInjection;
using System.Runtime.InteropServices;
namespace _2_28.NET依赖注入
{
internal class Program
{
static void Main(string[] args)
{
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddScoped<Controller>();
serviceDescriptors.AddScoped<ILog, Log>();
serviceDescriptors.AddScoped<ICloud, Cloud>();
serviceDescriptors.AddScoped<IConfig, Config>();
using (var sp = serviceDescriptors.BuildServiceProvider())
{
var result = sp.GetService<Controller>();
result.Test();
}
}
}
class Controller
{
private readonly ILog log;
private readonly ICloud cloud;
public Controller(ILog log,ICloud cloud)
{
this.log = log;
this.cloud = cloud;
}
public void Test()
{
log.Log("上传...");
this.cloud.Save("1.txt", "DI Test");
log.Log("上传完成...");
}
}
interface ILog
{
public void Log(string msg);
}
class Log : ILog
{
void ILog.Log(string msg)
{
Console.WriteLine($"Log : {msg}");
}
}
interface IConfig
{
public string GetValue(string name);
}
class Config : IConfig
{
public string GetValue(string name)
{
return "e:/a/"+name;
}
}
interface ICloud
{
public void Save(string content,string name);
}
class Cloud : ICloud
{
private readonly IConfig config;
public Cloud(IConfig config)
{
this.config = config;
}
public void Save(string fName, string content)
{
File.WriteAllTextAsync(config.GetValue(fName), content);
}
}
}
通过分步调试之后,可以观察到在Cloud类,Controller类中的构造函数中的服务参数都被DI自动赋值了。
本文章使用limfx的vscode插件快速发布