首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法让ValueInjecter映射COM对象

无法让ValueInjecter映射COM对象
EN

Stack Overflow用户
提问于 2011-03-19 23:44:53
回答 1查看 495关注 0票数 2

请参见下面的代码。测试在使用AutoMapper时通过,但在使用ValueInjecter时失败:

代码语言:javascript
复制
using NetFwTypeLib;

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        INetFwPolicy2 policy = (INetFwPolicy2)Activator.CreateInstance(
                Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
        INetFwRules fwRules = policy.Rules;
        Rule rule = new Rule();

        foreach (INetFwRule fwRule in fwRules)
        {
            if (fwRule.Name == "HomeGroup Out")
            {
                //AutoMapper.Mapper.CreateMap<INetFwRule, Rule>();
                //AutoMapper.Mapper.Map(fwRule, rule);
                rule.InjectFrom(fwRule);
                break;
            }
        }
        Assert.IsTrue(rule.Name == "HomeGroup Out");
    }
}

public class Rule
{
    public string Name { get; set; }
}

有什么想法吗?谢谢。

编辑:

根据Omu的回答,问题似乎与COM对象有关,而不仅仅是FirewallAPI.dll类。因此,我将标题从“无法让ValueInjecter映射FirewallAPI.dll类”改为“无法使ValueInjecter映射COM对象”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-21 13:54:53

它不起作用是因为:

代码语言:javascript
复制
fwRule.GetType().GetProperties().Count()// is 0 

或者使用PropertyDescriptor进行同样的操作也会返回零,就像对象没有属性一样

解决方案是编写一个将类型从何处获取属性的注入:

代码语言:javascript
复制
public class Same<T> : ValueInjection
{
   protected override void Inject(object source, object target)
   {
       var props = typeof (T).GetInfos().ToArray();
       var tp = target.GetInfos().ToArray();
       for (var i = 0; i < props.Count(); i++)
       {
          var prop = props[i];
          for (var j = 0; j < tp.Count(); j++)
          {
            if(prop.Name == tp[j].Name && prop.PropertyType == tp[j].PropertyType)
            tp[j].SetValue(target,prop.GetValue(source, null),null);
          }
        }
      }
  }

以及使用情况:

代码语言:javascript
复制
rule.InjectFrom<Same<INetFwRule>>(fwRule);

这与默认的InjectFrom()相同,但它从提供的类型读取目标属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5365738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档