我正在使用IServiceCollection
为我的对象创建所需服务的列表。现在我想实例化一个对象并让DI容器解析该对象的依赖关系
示例
// In my services config.
services
.AddTransient<IMyService, MyServiceImpl>();
// the object I want to create.
class SomeObject
{
public SomeObject(IMyService service)
{
...
}
}
如何让DI容器创建SomeObject
类型的对象,并注入dependecies? (可能这是它对控制器的作用?)
注意:我不想将SomeObject
存储在服务集合中,我只是希望能够做到这样的事情......
SomeObject obj = startup.ServiceProvider.Resolve<SomeObject>();
...基本原理:我没有必要将所有控制器添加到服务容器中,所以我不明白为什么我要向它添加SomeObject
!
答案 0 :(得分:6)
如标记答案的注释中所述,您可以使用ActivatorUtilities.CreateInstance
方法。 .net Core中已经存在此功能(我认为自1.0版以来)。
答案 1 :(得分:2)
这有点粗糙,但这有效
Carthage bootstrap --platform iOS --no-use-binaries --toolchain com.apple.dt.toolchain.Swift_3_0
答案 2 :(得分:0)
扩展方法:
public static class Extensions
{
public static T BuildObject<T>(this IServiceProvider serviceProvider, params object[] parameters)
=> ActivatorUtilities.CreateInstance<T>(serviceProvider, parameters);
}
用法:
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var ss = HttpContext.RequestServices.BuildObject<SomeService>();
}