[英]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.