【发布时间】:2018-04-18 09:36:28
【问题描述】:
我有以下结构:
class SomeViewModel
{
public SomeViewModel(SomeService service)
{
service.SetViewModel(this); // <- Move this call to Autofac
}
}
class SomeService
{
public void SetViewModel(object viewModel)
{
//...
}
}
我不想在每个 ViewModel 中手动调用 service.SetViewModel,而是希望将此调用移至 IoC 容器 (Autofac)。我试过使用OnActivated,但没有可用的参数:
builder.Register<SomeViewModel>
.AsSelf()
.OnActivated(e =>
{
var service = e.Parameters
.OfType<SomeService>()
.FirstOrDefault(); // <- There are no parameters
service.SetViewModel(e.Instance);
});
是否可以将SomeViewModel 构造函数中的调用service.SetViewModel(this); 移动到某种Autofac 注册中?
【问题讨论】:
-
通常最好以依赖关系图变为非循环的方式重构代码。循环依赖图是一种设计味道。
-
没有任何
Parameters,因为我猜你没有调用Resolve<T>并指定任何-Resolve<T>(param1, param2...)。这些参数是解析参数,而不是构造函数参数。 -
谢谢@TravisIllig,这是我正在寻找的信息。我认为
Parameters代表构造函数参数。
标签: c# dependency-injection inversion-of-control autofac ioc-container