使用分部属性和代码生成器完成依赖自动注入
对于使用 IOC 管理的服务,通常会对构造函数中的依赖完成自动的依赖注入,但对于属性就需要额外处理了。
比如,可以使用 Autofac
这个成熟的框架。
本文是一个利用 SourceGenerator 和 partial property 特性,完成属性依赖注入的一个案例。
如果说相比 Autofac
等有什么优势的话,就是本文的方式,不要求被注入的类被 IOC 管理,因为本质上只是帮你简单偷懒了一下。
以前的写法
class MyClass
{
public IMyService MyService => App.GetService<IMyService>();
}
现在的写法
partial class MyClass
{
[Autowired]
public partial IMyService MyService { get; }
}
就这么一点东西,甚至偷懒都不多,因为要声明 partial
。
具体实现和使用方法,可以看源码:
NuGet Gallery | Jgrass.DIHelper 1.0.0
非常小的项目(不需要使用 Autofac
),可以用这个库帮忙偷个懒,少写一点点代码。
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=7qgy37e7ppt
作者:
J.晒太阳的猫
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。