kirov-opensource / NAutowired

ASP.NET CORE Field Injection Implement
MIT License
77 stars 16 forks source link

[Service] [Repository] [Component]这几个特性看起来是一样,是否设计上有什么意义 #6

Closed kywvane closed 4 years ago

kywvane commented 4 years ago

最近用了用Spring-boot,发现它的ioc容器,有autowired功能。 查了些资料,感觉.net这块ioc容器都没有做这个。 目前看了两个例子,除了这个,另一个是对autofac的扩展,yuzd/Autofac.Annotation。 读了本项目的源码,有个小问题: [Service] [Repository] [Component]这几个特性看起来是一样,是否设计上有什么意义?

FatTigerWang commented 4 years ago

这个特性是加入到容器时的标识, 目前这几个的作用是一样的, 只要用了这几个特性就会自动加入到容器, 不用同一个特性而分开多个特性是为了给以后的功能提前设计. 一般标识[Repository]特性的可能是个仓储, [Component]可能是个组件, 为了后续能够区分, 所以设计不同特性.

FatTigerWang commented 4 years ago

NET Core容器不做Autowired的原因是因为这是一个anti-pattern, 这种模式会隐藏类的依赖, 导致很多玄学问题

FatTigerWang commented 4 years ago

另外这个项目与Autofac不同之处在于, 我们没有接管整个容器, 我们只接管了还原依赖的方式, 容器还是NET Core的容器