繁体   English   中英

使用Autofac在Web API中手动解析服务

[英]Resolve a service manually in Web API using Autofac

如何使用Autofac在Web API项目中手动解析服务。 我有一堂课叫做Foo。 Foo由Activator.CreateInstance由另一个我无法控制的类实例化,这意味着它将调用无参数构造函数。

我有一些属性需要在Foo类中注入。 现在,由于调用类调用了无参数构造函数,因此我需要手动解析这些属性。

public class Foo
{

    private IService Instance;

    public Foo()
    {
        //How do I get the per request lifetime scoped dependency resolver here
        IService = (Dependency Resolver).Resolve<IService>();
    }

}

由于您无法控制此类的构造,因此唯一的方法是通过服务定位器。

尽管服务定位器被认为是一种反模式 ,但您必须强制使用诸如此类的限制。

您将必须创建一个称为ServiceLocator之类的静态类。 它应该有一些方法来注册服务(或者应该包装DI容器,在这种情况下,这就是您想要的),以及其他方法来定位服务。

这里查看Locator类以获取样本定位器。 但是,根据您的情况,您只需要包装AutoFac容器的类似类即可。 因此,在此类Service Locator类中创建一个静态方法以接收和包装DI容器。

关于生存期,可以在服务定位器中创建一种特殊方法,该方法允许您使用特殊生存期类型(通过适当调用DI容器)来解析服务。

在项目内部拥有一个Service Locator会产生诱惑,以致在应该改为使用Dependency Injection的情况下使用它(几乎一直如此)。 确保仅在这种情况下使用服务定位器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM