簡體   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