-
Notifications
You must be signed in to change notification settings - Fork 52
3.PropertySource和Value
俞正东 edited this page Jan 18, 2023
·
14 revisions
属性 | 说明 |
---|---|
Path | 文件路径,看下面的说明 |
OrderIndex | 文件源排序,越大越先作为查找对象 |
Embedded | 是否为内嵌资源 |
ReloadOnChange | 是否监听文件有修改自动重新加载 默认true (注意:非内嵌资源才行) |
Dynamic | 动态数据源类型 必须继承接口:IDynamicSourceProvider <为了扩展自定义数据源用的> |
Key | 当上面的Dynamic动态数据源类型有多个注册的时候根据key来获取唯一<为了扩展自定义数据源用的> |
[PropertySource("appsettings.json")] //这行也可以直接去掉 因为和默认的一样
[Component]
public class Student9
{
[Value("${a9}")]
public string Name { get; set; }
}
- PropertySource的path可以指定为json 和 xml 文件
- PropertySource 如果不指定path 默认path为根目录的appsettions.json
- 如果Path的值为 / 开头 则代表为相对于工程目录
- 如果设定 Embedded = true 则代表path的值为 内嵌资源的文件名称
- Path的值也可以为 文件的完整路径
属性 | 说明 |
---|---|
value | 对应的key |
UseSpel | 是否启用SPEL 默认true,如果false,那么根据配置的value的值直接从PropertySource里面读取 |
IgnoreUnresolvablePlaceholders | 如果从数据源取不到要不要报错,默认取不到报错 |
EnvironmentVariableMode | 设置是否从环境变量拿 默认是从PropertySource里面读取不到 就从环境里面去拿 |
- ${xxx} 代表从配置源里面 获取属性名称为xxx的值
- #{xxx} 代表启动SPEL表达式,xxx里面可以嵌套${yyy}
- SPEL表达式具体用法可以查看:https://github.com/yuzd/Spring.EL
appsettings.json文件内容如下:
{
"a9": "aaaaaaaaa",
"list": "1, 2, 3, 4 ",
"dic": "#{'name': 'name1','school': 'school1'}",
"parent": {
"name": "yuzd"
},
"list2": [
"1",
"2"
],
"ValueInjectModel1": {
"Name": "yuzd",
"Age": 20
}
}
[Value("hello")]
private string normal; // 注入普通字符串 normal=“hello”
[Value("${a9}")]
private string a9; // 注入a9 =“aaaaaaaaa”
Value("${list}")]
private List<int> list; // 注入list是int的集合 [1,2,3,4]
[Value("#{${dic}}")]
private Dictionary<string, string> dic; // 注入dic是字典 {'name': 'name1','school': 'school1'}
[Value("list2", UseSpel = false)] //注意这里UseSpel设置为false,注入list2 是string集合 ['1','2']
public List<string> list2 { get; set; }
[Value("ValueInjectModel1", UseSpel = false)] //注意这里UseSpel设置为false,注入ValueInjectModel1对象 {'Name': 'yuzd','Age': 20}
public ValueInjectModel1 ValueInjectModel1 { get; set; }
containerBuilder.RegisterModule(new AutofacAnnotationModule()
.SetDefaultValueResource(c.Configuration) //c.Configuration是当前应用的Configuration,这样设置后,如果没有特别指定PropertySource的话value读取的数据源默认从这里获取了
);