接口成员的属性注入
本文关键字:注入 属性 成员 接口 | 更新日期: 2023-09-27 18:02:47
我可以使用以下代码进行属性注入:
builder.RegisterType<ListViewModel>()
.PropertiesAutowired();
为所有属性注入依赖项。但有时我只想为接口的成员做属性注入:
public interface IHasCommonServices
{
ISession Session { get; set; }
IEventPublisher EventPublisher { get; set; }
}
public class ListViewModel : IHasCommonServices
{
// Inject dependencies for these properties
public ISession Session { get; set; }
public IEventPublisher EventPublisher { get; set; }
// Don't inject for these properties
public ListItemViewModel SelectedItem { get; set; }
}
是否可能出现如下情况?
builder.RegisterType<ListViewModel>()
.InjectForInterface<IHasCommonServices>();
谢谢。
不确定这是否是您所追求的,但我认为在大多数情况下您可以使用:
.PropertiesAutowired(PropertyWiringFlags.PreserveSetValues);
如果你需要更细粒度的控制,你可以使用OnActivated:
builder.Register<ListViewModel>()
.As<IHasCommonServices>()
.OnActivated(c =>
{
c.Instance.Session = c.Context.Resolve<ISession>();
c.Instance.EventPublisher = c.Context.Resolve<IEventPublisher>();
});
这有点乏味,但我认为你不需要经常做太多的属性注入。
希望对你有帮助。