.net core 依赖注入在特性中的应用,不知道怎么用属性注入,那么在特性中的构造函数里,怎么用接口的方法呢?
来一个简单的例子:
主要思路是把ServiceProvider 静态全局化:
public classProgram
{public static ServiceProvider serviceProvider=null;static void Main(string[] args)
{
Console.WriteLine("Hello World!");
serviceProvider= newServiceCollection()
.AddTransient()
.BuildServiceProvider();var s = newStudent();
Type t= typeof(Student);foreach (var item int.CustomAttributes)
{var aa= Activator.CreateInstance(item.AttributeType,new object[] { "apple"});
Console.WriteLine("-------");
}
Console.ReadLine();
}
}
这样在特性的方法中就能使用了。
这种方式,不是依赖注入,而是叫Service Locator 的“模式”。参考
依赖注入,无所不在,那什么需要注入呢?好像是所有东西,实际上却是不可能的。一个Student 类,只有年龄,性别等简单的属性,这在程序中类似于Model, 或数据库中的基础表。他的构造函数里也只有基础类型的参数。这个会需要注入吗?好像没有场景,也没见过需要注入一个Student的。
这个是不需要的,注入的,一般是接口,接口是功能的抽象,也就是说注入的是功能。某一个类,需要某一个功能,那就注入这个有这个功能的接口就好。
在 .NetCore 中,DI容器中的项,叫Service, 容器叫ServiceCollcetion/serviceProvider . 强调的,这里面的内容,都是服务/功能