接口成员的属性注入

本文关键字:注入 属性 成员 接口 | 更新日期: 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>();
                    });

这有点乏味,但我认为你不需要经常做太多的属性注入。

希望对你有帮助。