gpt4 book ai didi

valueinjecter - 使用 ValueInjecter,有没有办法只注入(inject)一次给定的属性

转载 作者:行者123 更新时间:2023-12-01 11:00:06 24 4
gpt4 key购买 nike

给定 3 个类,

A 和 B 每个都有一个 ID 属性,然后是其他各种属性

和C,它有一个ID,以及A和B的组合属性,

我要

C.InjectFrom(A);
C.InjectFrom(B);

这样来自 A 的 ID 将被保留且不会被 B 覆盖。

显然,在这个简单的例子中,我可以颠倒这两个调用的顺序,但在我的真实示例中,它稍微复杂一些,我不能只通过排序来解决问题。

本质上,我希望第二次注入(inject)忽略第一次注入(inject)已经处理的所有内容,并且这可能会在多次注入(inject)链中继续进行。其中一些注入(inject)也可能来自相同的对象

C.InjectFrom(A);
C.InjectFrom<SomeInjector>(A);
C.InjectFrom<SomeInjector2>(A);
C.InjectFrom<SomeInjector3>(A);

等等

最佳答案

给你:

using System;
using System.Collections.Generic;
using Omu.ValueInjecter;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{

var a = new { Id = 1, P1 = "p1" };
var b = new { Id = 2, P2 = "p2" };

var c = new C();

var propList = new List<string>();
c.InjectFrom(new HandlePropOnce(propList), a);
c.InjectFrom(new HandlePropOnce(propList), b);

Console.WriteLine("Id = {0} P1 = {1} P2 = {2}", c.Id, c.P1, c.P2);
}
}

public class C
{
public int Id { get; set; }

public string P1 { get; set; }

public string P2 { get; set; }
}

public class HandlePropOnce : ConventionInjection
{
private readonly IList<string> handledProps;

public HandlePropOnce(IList<string> handledProps)
{
this.handledProps = handledProps;
}

protected override bool Match(ConventionInfo c)
{
if (handledProps.Contains(c.SourceProp.Name)) return false;

var isMatch = c.SourceProp.Name == c.TargetProp.Name && c.SourceProp.Type == c.TargetProp.Type;

if (isMatch) handledProps.Add(c.SourceProp.Name);
return isMatch;
}
}
}

关于valueinjecter - 使用 ValueInjecter,有没有办法只注入(inject)一次给定的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com