簡體   English   中英

Autofac委托工廠和RegisterGeneratedFactory()的區別

[英]the difference of Autofac delegate factory and RegisterGeneratedFactory()

根據autofac doc ,當服務構造函數具有如下重復類型時:

public class DuplicateTypes
{
  public DuplicateTypes(int a, int b, string c)
  {
    // ...
  }
}

Func<X,Y,B> 不起作用,您應該改用自定義委托類型:

public delegate DuplicateTypes FactoryDelegate(int a, int b, string c);

使用委托工廠,我們可以在不注冊任何其他內容的情況下解析 FactoryDelegate:

builder.RegisterType<DuplicateTypes>();
var container = builder.Build();
var scope = container.BeginLifetimeScope();
var func = scope.Resolve<FactoryDelegate>();

但是在 autofac 文檔中,我們可以使用 RegisterGeneratedFactory() 注冊該委托:

builder.RegisterType<DuplicateTypes>();
builder.RegisterGeneratedFactory<FactoryDelegate>(new TypedService(typeof(DuplicateTypes)));

之后我們也可以解析FactoryDelegate。

var func = scope.Resolve<FactoryDelegate>();

那么delgate工廠和RegisterGeneratedFactory有什么區別呢? RegisterGeneratedFactory 是多余的嗎? 如果不是,RegisterGeneratedFactory 適合哪種情況?

簡短的版本是你真的不需要RegisterGeneratedFactory 如果您查看API 文檔,您會看到它說:

這些功能位於此命名空間中,因為它們仍可供最初針對 Autofac 1.4 編寫的應用程序訪問。 在 Autofac 2 中,此功能是隱式提供的,因此很少需要進行顯式注冊。

所以,基本上,它是為以前使用它的人准備的,所以我們不會破壞它們,但我們現在進入 Autofac 6,在新應用程序中使用它沒有任何價值。

我們可能應該考慮在 Autofac 中棄用這些方法,以便我們可以在下一個主要版本中刪除它們並減少混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM