之所以有这个想法,起源于对于二开的需求和不想要动态加载的执念。起初的一种设计思路是将同一个Route的不同实现,放于不同的项目,进而发布为不同的dll,然后通过动态加载和
IWebBuilder.AddControllers().AddApplicationPart(Assembly)
的方式来实现。这样做的优势是不需要修改源代码,只需要提前做好约定,然后在部署的时候选择需要的程序集进行部署即可。而弊端则是随着程序集的数量的增加,维护和二次开发会存在大量代码冗余和工作冗余的事情。
故而,在对net core进行的一番思考后,我认为接口化编程是更符合需求的设计思路。
AspNetCore的接口化,依托于其给出的三种注入接口:
-
IServiceCollection.AddSingleton
这种方式注入的接口是单例化的,全局仅会使用一个实例。 -
IServiceCollection.AddScoped
这种方式注入的接口是域的,每一个客户端所请求的,都应当是同一个实例。 -
IServiceCollection.AddTransient
这种方式注入的接口是始终更新的,每一次获取的实例都是新的。