Skip to content

使用分部属性和代码生成器完成依赖自动注入

Published: at 17:35

对于使用 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

具体实现和使用方法,可以看源码:

JasonGrass/Jgrass.DIHelper

NuGet Gallery | Jgrass.DIHelper 1.0.0

非常小的项目(不需要使用 Autofac),可以用这个库帮忙偷个懒,少写一点点代码。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=7qgy37e7ppt


原文链接: https://blog.jgrass.cc/posts/auto-property-dependency-injection/

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。