小编Mat*_*van的帖子

Autofac 委托工厂可以将参数传递给嵌套对象吗?

我想使用 Autofac 委托工厂来解析对象图,其中一些嵌套对象需要传递参数。例如,如果Autofac 委托工厂示例中的 QuoteService需要一个 url 来检索数据,或者 QuoteService 本身具有需要参数的依赖项。

public class WebQuoteService : IQuoteService
{
  public WebQuoteService(Uri source)
  {
  }
}

public class Shareholding
{
  public Shareholding(string symbol, uint holding, IQuoteService quoteService)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够声明并注册一个委托,如下所示:

public delegate Owned<Shareholding> ShareholdingFactory(string symbol, uint holding,
                                                        Uri source);
builder.RegisterGeneratedFactory<ShareholdingFactory>();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是 Autofac 无法解析 WebQuoteService 的 uri 参数。

我见过一些类似的问题和解决方案,但没有什么特别简洁的。Autofac-passing-parameter-to-nested-types建议注册 lambda 来显式实现工厂并解决嵌套依赖关系。我确信这会起作用,但是如果需要更深层次的参数或存在更多依赖项时,它会变得非常混乱。

我使用的临时解决方案是对此的改进,解析 Shareholding 中的 IQuoteService OnPreparing,并转发由 Autofac 生成的工厂创建的参数。

 builder.RegisterType<Shareholding>().OnPreparing(e =>
            {
                e.Parameters = e.Parameters.Union(new[]
                {
                    new TypedParameter(typeof (IQuoteService), e.Context.Resolve<IQuoteService>(e.Parameters))
                }); …
Run Code Online (Sandbox Code Playgroud)

c# autofac

5
推荐指数
1
解决办法
1701
查看次数

标签 统计

autofac ×1

c# ×1