您知道如何在 .net核心中手动解决依赖关系吗? 像
这样的东西DependencyResolver.Resolve<ISomeService>()
更新 我在一个没有注入的类中,我想从内部解决它,而不是在整个地方传递变量
答案 0 :(得分:2)
在ConfigureServices
中添加您的依赖关系,如下所示
public void ConfigureServices(IServiceCollection services){
//AddSingleton or AddTransient based on your requirements
services.AddTransient<ISomeService, ConcreteService>();
}
在您的控制器或任何地方,在构造函数中添加IServiceProvider
,如下所示:
using Microsoft.Extensions.DependencyInjection;
...
public class HomeController
{
...
public HomeController(IServiceProvider serviceProvider)
{
var service = serviceProvider.GetService<ISomeService>();
}
}
@Shazam,以下是基于您的评论的一些注意事项或建议:
如果因为你可能没有这个类中的构造函数而无法注入,我建议在你的函数中添加一个参数并从外部传递已解析的依赖项
另一个想法是添加静态属性并在ConfigureServices
例如:
public static class MyClass
{
public static ISomeService MyServiceObj { set; get; }
....
}
在ConfigureServices
public void ConfigureServices(IServiceCollection services){
services.AddTransient<ISomeService, ConcreteService>();
MyClass.MyServiceObj = services.GetService<ISomeService>();
}
希望这会有所帮助,请评价我的答案,或者如果您仍然有疑问,请给我发表评论
答案 1 :(得分:0)
Shazam,如果你需要在你的代码中使用该服务,请在启动类中注入它,然后在构造函数中自动解决它。就是这样。
在你的情况下可能是这样的:
在StartUp类中:
services.AddSingleton<ISomeService, SomeService>();
在课堂上(控制器可能是?):
public YourController(ISomeService someService)
{...
然后你可以使用它。
我希望它有所帮助。