我使用Ninject代替MEF,我想知道是否可以通过标准内核方法而不是通过[inject]来获取延迟实例。 我需要这个,因为在构建我的应用程序菜单时,我必须传递所有特定的视图模型,然后如果用户已启用该功能将其添加到菜单
由于
答案 0 :(得分:1)
当然,您可以注入Lazy<T>
,只有在您访问Lazy<T>.Value
时才会实现该值。
你也可以注入一个Func<T>
并用它来创建T
(使用func,每次调用都会创建一个新实例)。
当然你也可以做IResolutionRoot.Get<Lazy<T>>()
或IResolutionRoot.Get<Func<T>>()
,但通常这是设计不良(服务定位器)的标志,所以在可行时使用构造函数注入。
编辑:什么时候发生“启用用户”?这是一次性的事吗?之前和之后显示的是什么? 可能还有其他/更好的设计可以实现这一目标,但很难用这些小信息说出来。