asp.net Core依赖注入
依赖注入的简单了解可通过-->依赖注入
asp.netcore可通过StartUp.cs文件实现依赖注入。
从.netcore入口讲起,Program是程序的入口,通过CreateDefaultBuilder方法创建了WebHost,程序启动后进入StartUp。此类包含ConfigureServices方法和
Configure。ConfigureServices最先运行,它包含IServiceCollection的参数。此方法有Add开头的扩展方法,创建Web程序的都会有一个叫AddMVC的扩展方法,此扩展方法是把MVC添加到服务容器(IServiceProvider)中。依赖注入的扩展包含如下:
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IPusher<WebSocket>,WebSocketPusher>(); // services.AddTransient() // services.AddScoped() }
首先我们先说一下AddSingleton。Singleton词意看出是单例的。只能实例出一次对象。Scoped是一个请求一个实例,Transient每次使用都是一个新实例。这三个方法都是同一件事,只不过生命周期不同。
介绍完注册依赖后进行使用。依赖注入有三种注入的方式,分别是构造函数注入,属性注入,方法注入。asp.netcore默认为我们使用了构造函数注入,也是我经常使用的注入方式。
下面是在MVC 控制器中的实现
public class DemoControler { private IPusher<WebSocket>_Interface{ get; set; } public Demo(IPusher<WebSocket> pusher) { _Interface= pusher; } }
也可以在View当中实现。需使用Razor的@inject
@inject IPusher<WebSocket> pusher
@pusher.GetXX();
以上是Asp.NetCore当中为我们默认实现的依赖注入。弊端就是比如我要注入多个对象还需要一个个的在StartUp类中添加,这岂不是太乱了吗?下次说一下Core下的AutoFac的实现