在Web API 2.2中:如何在需要时使用依赖注入器?

时间:2015-08-31 08:28:54

标签: asp.net asp.net-web-api2

我对这篇文章有疑问,我们很多人都读过这篇文章:Dependency Injection in ASP.NET Web API 2

让我们假设,稍后某个时间点的ProductRepository需要委托给其他服务。 ProductRepository如何在以后的时间从依赖注入器请求具体实例,因为将依赖注入器本身注入ProductRepository是一种不好的做法?

1 个答案:

答案 0 :(得分:0)

您可以将新服务注入ProductRepository,就像将IProductRepository注入ProductsController一样。

public interface IOtherServiceFactory
{
    IOtherService Create();
}

public class ProductRepository : IDisposable
{
    private readonly IOtherServiceFactory m_OtherServiceFactory;

    public ProductRepository(IOtherServiceFactory other_service_factory)
    {
        m_OtherServiceFactory = other_service_factory;
    }

    ...
}

如果您在容器中成功注册IOtherService,容器将能够成功创建ProductRepository和ProductsController。

如果您每次都创建了OtherService(也许您不会一直使用它),那么您可以使用Alamofire。例如:

$('zoomer-img').click(function(){
    var that =     $(this);
    var num = parseInt(that.data('src').substring(that.data('src').indexOf('img/'),that.lastIndexOf('.'))) + 1;
    that.data('src','img/'+num+'.gif');
});

现在,您只能在需要时创建OtherService实例。

您必须创建IOtherServiceFactory的实现并将其注册到容器中。