我的Startup
是这样的:
public void ConfigureServices(IServiceCollection services)
{
// code here
Bootstraper.Setup(services);
}
我的Bootstraper
课是这样的:
public static partial class Bootstraper
{
// code here
public static IServiceCollection CurrentServiceCollection { get;set;}
public static IServiceProvider CurrentServiceProvider
{
get { return CurrentServiceCollection.BuildServiceProvider(); }
}
public static void Setup(IServiceCollection serviceCollection)
{
// code here
SetupLog();
InitializeCulture();
InitializeDbContexts();
RegisterDataModelRepositories();
}
这是我RegisterDataModelRepositories()
的内容:
CurrentServiceCollection.AddTransient<IDefAccidentGroupRepository>(p => new DefAccidentGroupRepository(ApplicationMainContextId));
CurrentServiceCollection.AddTransient<IDefGenderRepository>(p => new DefGenderRepository(ApplicationMainContextId));
简而言之:我只是希望能够在我的方法中使用服务定位器,而无需解决类构造函数中的依赖关系......有什么办法吗....
依赖注入也可以按操作完成。
引用依赖注入到控制器中:使用 FromServices 的操作注入
有时,控制器中的多个操作不需要服务。在这种情况下,将服务作为参数注入操作方法可能是有意义的。这是通过使用属性标记参数来完成的
[FromServices]
public IActionResult SomeAction([FromServices] IReportService reports) {
//...use the report service for this action only
return View();
}
只需确保所需的服务已注册到服务集合。
services.AddTransient<IDefAccidentGroupRepository>(p => new DefAccidentGroupRepository(ApplicationMainContextId));
services.AddTransient<IDefGenderRepository>(p => new DefGenderRepository(ApplicationMainContextId));
services.AddTransient<IReportService, ReportService>().
好吧,感谢您的帮助...有一个更简单更好的方法,我只需要添加另一个使用这些存储库的服务,然后在我的控制器中解析该服务,让 Asp.net Core 2.0 DI 为我解决问题......
public interface IActionService
{
IRepositoryA repA {get;set;}
IRepositoryB repB { get;set;}
DoTaskX();
DoTaskY();
}
那么在我的行动服务中:
public class ActionService : IActionService
{
public IRepositoryA repA {get;set;}
public IRepositoryB repB { get;set;}
public ActionService (IRepositoryA rep_a , IRepositoryB rep_b ) {
repA = rep_a;
repB = rep_b;
}
DoTaskX(){
// do task using repository A and B
}
}
然后我在启动中注册 IActionService.cs并在我的 ActionController 中解决它,生活变得更容易,代码变得更干净......
解决方案很容易,但我必须改变我的心态来解决问题......