C#依赖注入的一些改进idea

对依赖注入的优化想法

1.希望提供新的方法。每个服务都继承或者实现了基类或接口,可以通过基类或接口名来获取服务的实例。

2.对注入的服务,先调用空构造实例化,再调用非空构造注入依赖,或者用其他方法进行依赖注入。这样可以让用户不用考虑注入顺序的问题。

3.希望增加一种新的添加服务的方法。定义自动特性,添加服务时传入匹配规则,将所有自动特性满足匹配规则的类添加服务。这样设计以后,可以更关注新服务的增加,而不用关注对启动类的修改。

4.对静态方法进行特性标记。同样,满足匹配规则的静态方法在配置服务时进行调用,且对其参数要求的服务进行依赖注入。解决的问题同3

一句话总结。我希望我们的代码只需要专注编写模块本身的逻辑,以及模块和模块之间的对接。而不需要关注除此之外的框架逻辑。



[AutoAdd("myapp","myapp2")] //通过AUtoAdd特性的不同参数,可以决定添加服务的时机,以及是否加载。我们只需要关注服务本身的代码

class A :IA

interface IA{

event Action<AArg> HiA;

}

[AutoAdd("myapp")]

class B :IB

interface IB{

void DoB(BArg barg);

}

static class ApplicationExtension{

[AutoUse("myapp")]

static void UseABService(IA a,IB b){

a.HiA+=(e)=>b.DoB(ConvertAToB(e));

//do something

}

}

class Program{

static void Main(string[] arg){

IServiceCollection services=new IServiceCollection();

services.AddAutoService("myapp");//添加所有标记了特性AutoAdd的服务

var provider= services.BuildServiceProvider();

provider.UseAuto();//配置全部标记了特性AutoUse的静态方法,自动注入依赖

//Program类可以最小程度关心,不必经常修改。

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容