相关疑难解决方法(0)

何时使用属性注入?

  1. 什么时候应该使用属性注入?
  2. 如果完全控制实例创建,我应该默认使用构造函数注入吗?
  3. 我是否正确使用构造函数注入我编写与容器无关的代码?

dependency-injection ioc-container

11
推荐指数
2
解决办法
1055
查看次数

ASP.NET Core MVC依赖注入通过property或setter方法

它已被充分记录,如何将依赖项注入服务.

问题:但是在ASP.NET Core 2.0中是否(已经)可以让系统的DI机制自动将服务注入方法或属性?

旁注:在PHP-Symfony中,这种模式称为setter injection.

示例: 假设MyBaseController我的项目中的所有控制器都有一个公共类,我希望注入一个服务(例如UserManager服务),MyBaseController以后可以在所有子控制器中访问.我可以使用构造函数注入将服务注入子类并将其传递base(userManager)给父类.但是必须在所有控制器的所有子构造器中执行此操作非常繁琐.

所以我想像这样设置一个setter MyBaseController:

public abstract class MyBaseController : Controller
{
  public UserManager<User> userManager { get; set; }

  // system should auto inject UserManager here
  public void setUserManager(UserManager<User> userManager) {
    this.userManager = userManager;
  }
}
Run Code Online (Sandbox Code Playgroud)

...所以我不必在每个子构造函数中执行以下操作只是为了将依赖项传递给父级:

public class UsersController : MyBaseController
{
  public ChildController(UserManager<User> userManager) : base(userManager) {}
Run Code Online (Sandbox Code Playgroud)

更新:这里给出的答案是我想要实现的,但问题是ASP.NET Core 1.0,我对ASP.NET Core 2.0中是否添加了任何解决方案感兴趣.

c# dependency-injection asp.net-core-2.0 asp.net-core-mvc-2.0

6
推荐指数
1
解决办法
3929
查看次数

ASP.NET Core Web API 中的属性和方法注入

如何实现属性和方法依赖注入?如何添加服务?最后,与使用构造函数注入相比,这能产生多大的影响?

是否可以使用属性/方法注入代替构造函数注入?

.Net 初学者,我们将不胜感激<3

在我使用构造函数 DI 的包装类中:

private ICustomerRepository _customerRepository; //For customer
private ICountryRepository _countryRepository; //For country
private IRegionRepository _regionRepository; //for region
private ICityRepository _cityRepository; //for city

// Constructor 
public RepositoryWrapper(OmniConnectDB context, ICustomerRepository customerRepository, IMapper mapper, ICountryRepository countryRepository, IRegionRepository regionRepository, ICityRepository cityRepository)
{
    _context = context;
    _mapper = mapper;

    _customerRepository = customerRepository;
    _countryRepository = countryRepository;
    _regionRepository = regionRepository;
    _cityRepository = cityRepository;   
}
Run Code Online (Sandbox Code Playgroud)

在服务方面:

// configure DI for Location Repositories
services.AddScoped<ICountryRepository, CountryRepository>();
services.AddScoped<IRegionRepository, RegionRepository>();
services.AddScoped<ICityRepository, CityRepository>();

// Configure DI for Customer …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core-webapi

4
推荐指数
1
解决办法
1686
查看次数

ASP.NET Core 自动解析所有依赖

是否可以配置 ASP.NET Core DI 来解析所有类?类似于 Autofac AnyConcreteTypeNotAlreadyRegisteredSource 功能的东西。

我可以在 ASP.NET Core 中使用 Autofac,但我不想在我的应用程序中添加额外的库,因为 ASP.NET Core 已经有 DI。

所以基本上而不是:

services.AddTransient<MyService>();
services.AddTransient<MyAnotherService>();
Run Code Online (Sandbox Code Playgroud)

我更愿意做这样的事情:

services.ResolveAll();
Run Code Online (Sandbox Code Playgroud)

asp.net-core

2
推荐指数
3
解决办法
4497
查看次数

带继承的asp.net核心构造函数注入

在我的asp.net核心应用程序中,我具有依赖项类,这些依赖项类注入了几乎所有服务。因此,我想构建一个基础服务类来获取对属性的这些依赖关系,并且我的服务继承该基础服务类。

public abstract class BaseService
{
    protected Foo Foo { get; set; }
    protected Bar Bar { get; set; }

    public BaseService(Foo foo, Bar bar)
    {
        Foo = foo;
        Bar = bar;
    }
}
public class Service : BaseService
{
    public Service(IOtherDependency otherDependency) { }

    public void Method()
    {
        var value = Bar.value;
        Foo.Do(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,对于给定的代码,它警告我使用提供的参数调用基本构造函数,但是它们是将在运行时注入的参数,我不希望这样做。如果添加无参数构造函数,它将不会调用我需要的参数化构造函数。

我不想在继承的服务中调用或定义任何在基本服务(FooBar)中注入的类,该怎么办?

顺便说一句Foo,如果Bar类的寿命很重要,则将类作为单例注入到容器中。

c# inheritance dependency-injection asp.net-core

1
推荐指数
3
解决办法
3535
查看次数