DryIoc,如何将属性设置为基础class?
DryIoc, how to set the properties to the base class?
我已经写了下面的 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>();
}
}
我的目标是 child 和(不太重要的)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"/>
有一个 sugar PropertiesAndFields static class 具有根据名称、类型或条件指定注入内容的方法:
container.Register<Parent>(
made: PropertiesAndFields.Of.Name("Str", serviceKey: "someId"));
设置属性只需注册即可。要将其与可能的多个注册字符串区分开来,请指定服务密钥:
container.RegisterInstance("my string", serviceKey: "someId");
我已经写了下面的 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>();
}
}
我的目标是 child 和(不太重要的)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"/>
有一个 sugar PropertiesAndFields static class 具有根据名称、类型或条件指定注入内容的方法:
container.Register<Parent>(
made: PropertiesAndFields.Of.Name("Str", serviceKey: "someId"));
设置属性只需注册即可。要将其与可能的多个注册字符串区分开来,请指定服务密钥:
container.RegisterInstance("my string", serviceKey: "someId");