2
다음 코드를 참조하십시오. AutoMapper를 사용할 때 테스트가 통과되었지만 ValueInjecter를 사용할 때 실패했습니다.COM 개체를 매핑 할 ValueInjecter를 가져올 수 없습니다.
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 클래스와 관련이 보인다. 그래서 제목을 ""에서 "FirewallAPI.dll 클래스"에 매핑 할 수 없습니다. "COM 객체를 매핑 할 ValueInjecter를 얻을 수 없습니다." ".
에서 대상 속성이 그래서 문제가 ValueInjector가 fwRule''의 실제 유형을 얻을 수없는 것 같다 읽습니다. 'fwRule'은 COM 객체입니다. 'GetType()'을 사용하면'System .__ ComObject'가 반환됩니다. AutoMapper는'Mapper.CreateMap()'을 통해 실제 타입을 알 수 있기 때문에 COM 객체와 잘 동작합니다. ValueInjector에 대한 해결 방법은 무엇입니까? 감사. –
@ caveman 예, 제 편집 대답을보세요 – Omu
코드를 보내 주셔서 감사합니다! 내 프로젝트에서 훌륭하게 작동합니다. –