【问题标题】:Auto-setting property values with Unity dependency injection使用 Unity 依赖注入自动设置属性值
【发布时间】:2014-06-25 02:53:53
【问题描述】:

我有一个带有一些属性的上下文接口,我希望在解决接口时统一自动设置这些属性。这是接口和类。

public interface IAdapterContext
{
    IFoo Foo { get; }

    IBar Bar { get; }
}

public class AdapterContext
{
    public IFoo Foo { get; set; } 

    public IBar Bar { get; set; }
}

接口成功解析到类,但所有实例成员均为空。注册了对应的实例成员接口。

一种解决方案是在接收所有值的类中添加一个构造函数,但我宁愿不这样做,因为我还想要默认构造函数以便于测试。仅仅为了满足统一而同时拥有默认值和非默认值并不适合我。

另一个解决方案是使用 InjectionProperty 类,但这总体上是一个比添加构造函数更复杂的解决方案。它还将属性名称与实际类分离,这可能会在重构期间中断。

unity 是否支持为实现的接口自动设置属性值,还是总是需要通过构造函数/InjectionProperty 来完成?

【问题讨论】:

  • 如果使用InjectionProperty 路由,请使用nameof(SomeType.TargetProperty) 以避免在重构时损坏。

标签: c# unity-container


【解决方案1】:

有一个Dependency 属性可用于标记要注入的属性。

public class AdapterContext
{
    [Dependency]
    public IFoo Foo { get; set; } 

    [Dependency]
    public IBar Bar { get; set; }
}

我不会推荐这个解决方案。我总是使用构造函数注入并为包含依赖项模拟的测试配置专用容器。

【讨论】:

  • 标记为答案,但仍使用基于构造函数的解决方案。感谢您的帮助!
猜你喜欢
  • 2012-05-03
  • 2021-03-17
  • 2019-04-13
  • 1970-01-01
  • 2013-09-17
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多