1 概要
1.1 依赖注入:从类的外部注入依赖项。
1.2 代码说明:从A的外部注入B(A依赖于B)。
运行结果
Hello World!
B的机能(A依赖于我的这个机能)
代码
using System;
namespace 依赖注入表示性代码
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
B b = new B();
A a = new A(b);//A注入依赖(b)
a.fun();
Console.ReadLine();
}
}
class B {
public void fun()
{
Console.WriteLine("B的机能(A依赖于我的这个机能)");
}
}
class A
{
B mB;
public A(B b)
{
mB = b;
}
public void fun()
{
// 我依赖于B的fun机能。
mB.fun();
}
}
}
2 应用举例
2.1 运行效果
Hello World!
hello,stephnie
2.2 代码
1.使用没有依赖注入的服务
using System;
namespace 依赖注入
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var controller = new HomeController();
string result = controller.Hello("stephnie");
Console.WriteLine(result);
Console.ReadLine();
}
}
public class CreetingServer
{
public string Creet(string name) => $"hello,{name}";
}
public class HomeController
{
public string Hello(string name)
{
var mCreetingServer = new CreetingServer();
return mCreetingServer.Creet(name);
}
}
}
2.使用依赖注入服务
using System;
namespace 依赖注入
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var controller = new HomeController();
string result = controller.Hello("stephnie");
Console.WriteLine(result);
Console.ReadLine();
}
}
public class CreetingServer
{
public string Creet(string name) => $"hello,{name}";
}
public class HomeController
{
public string Hello(string name)
{
var mCreetingServer = new CreetingServer();
return mCreetingServer.Creet(name);
}
}
}
3.使用容器注入服务
using System;
using Microsoft.Extensions.DependencyInjection;
namespace 依赖注入
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
//var controller = new HomeController(new CreetingServer());
//string result = controller.Hello("stephnie");
//Console.WriteLine(result);
using(ServiceProvider container = RegisterServices())
{
var controller = container.GetRequiredService<HomeController>();
string result = controller.Hello("stephnie");
Console.WriteLine(result);
}
Console.ReadLine();
}
static ServiceProvider RegisterServices()
{
var services = new ServiceCollection();
services.AddSingleton<ICreetingServer, CreetingServer>();
services.AddTransient<HomeController>();
return services.BuildServiceProvider();
}
}
public interface ICreetingServer
{
string Creet(string name);
}
public class CreetingServer: ICreetingServer
{
public string Creet(string name) => $"hello,{name}";
}
public class HomeController
{
private readonly ICreetingServer mCreetingServer;
public HomeController(ICreetingServer s)
{
mCreetingServer = s;
}
public string Hello(string name)
{
return mCreetingServer.Creet(name);
}
}
}
附:DependencyInjection包下载