在使用asp netcore的某个时刻,我注意到与大多数情况下不同,在这些情况下,您注册依赖项如下:
services.AddTransient<IService, Service>()
services.AddScoped<IService, Service>()
services.AddSingleton<IService, Service>()
使用时不需要此过程 IOption<T>
这是我不知道的Microsoft.Extensions.DependencyInjection的功能吗,还是只是一些代码在做反射?(我无法想象如何,因为任何类都可以用于IOptions注入)
在我看来,这似乎是运行时工厂的事情,而不是一些底层程序集扫描+注册。
如果这是Microsoft.Extensions.DependencyInjection的功能,我很想知道它的调用方式,这样我就可以了解更多信息。
是否有catch all
工厂为其中的请求服务构建实例Microsoft.Extensions.DependencyInjection
?
选项模块IOptions<TOptions>
使用开放的泛型注册接口。
例如,一个简单的通用接口
public interface IMyInterface<T> : where T: class {
T Value { get; }
}
及其实现
public class MyClass<T> : IMyInterface<T> : where T: class {
public MyClass(IDependency dependency) {
//...
}
public T Value {
get {
//...
}
}
}
可以使用(通用)开放类型进行注册,例如
services.AddSingleton(typeof(IMyInterface<>), typeof(MyClass<>));
这样,无论何时IMyInterface<SomeClass>
要求解决a,MyClass<SomeClass>
都会被激活。容器IMyInterface<SomeClass>
通过利用(通用)开放类型来解析,从而无需注册每个(通用)构造类型
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句