我有一个类,它以Func
作为构造函数参数:
public CurrencyCache(Func<IEnumerable<Currency>> loadData)
Func
基本上是缓存过期时调用的方法
当我在AutoFac中注册时,我需要指定方法。为此,我需要从容器中解析依赖关系。除了我不能,因为容器尚未建成
builder.Register(o => new CurrencyCache(<some code to resolve the class with the method I want to call>));
我不想手动将依赖图新建到这个类,因为它有几个层次,需要来自配置文件等的各种数据
所以我希望容器为我解决这个类
但正如我所说,容器还没有建成
有解决方法吗? Autofac是否有一些api来处理这种情况
答案 0 :(得分:1)
当您将Register
方法与lambda参数一起使用时,第一个参数是IComponentContext
,它是一个构建容器。
你可以这样做:
builder.Register(o => new CurrencyCache(o.Resolve<XXX>().DoSomething));
顺便说一下,请注意注册范围以避免captive dependency issue。