DryIoc,如何将属性设置为基类?

时间:2016-03-07 16:14:54

标签: dryioc

我写过以下POC,但我不得不承认我对如何实现这一目标感到非常困惑。

public class Parent
{
    public string Str;

    public Parent()
    {
    }
}

public class Child : Parent
{

}

public class Program
{
    static void Main(string[] args)
    {
        var container = new Container();
        var prop = typeof (Parent).GetMember(nameof(Parent.Str)).First();
        var x = new [] { PropertyOrFieldServiceInfo.Of(prop) };
        container.Register<Parent, Parent>(made: Made.Of(propertiesAndFields: (r) => x));
        // Set "X" somewhere??    
        container.Register<Child, Child>();

        var parent = container.Resolve<Parent>();
        var child = container.Resolve<Parent>();
    }
}

我的目标是,孩子和(不太重要)父母将Str属性设置为“X”。

我需要知道,因为我想从Spring.Net转换为DryIoc,就像下面这样。

<object id="parentManager_transport" abstract="true">
  <property name="EntityManager" ref="entityManager_transport"/>
</object>

<object id="carManager" type="xxx" parent="parentManager_transport"/>
<object id="carMakerManager" type="yyy" parent="parentManager_transport"/>
<object id="carFuelManager" type="zzz" parent="parentManager_transport"/>

1 个答案:

答案 0 :(得分:1)

有一个糖PropertiesAndFields静态类,其中包含根据名称,类型或条件指定注入内容的方法:

container.Register<Parent>(
    made: PropertiesAndFields.Of.Name("Str", serviceKey: "someId"));

设置属性只需注册它。要将其与可能的多个注册字符串区分开,请指定服务密钥:

container.RegisterInstance("my string", serviceKey: "someId");