C# CF2.0- 시스템. 활동 및 내부 클래스
-
23-08-2019 - |
문제
엔티티 모음이 포함 된 데이터 제공 업체가 있습니다. 데이터 제공 업체를 통해 새로운 엔티티 만 만들 수 있기를 원합니다.
즉, 새로운 레코드를 만들려면 사용해야합니다.
Entity entity = Provider.AddNew();
enity.set_Properties... etc
내 문제는 내 엔티티를 내부 시스템으로 설정하면 Activator가 인스턴스를 만들 수 없다는 것입니다. 각 데이터 제공 업체는 일반 유형의 엔티티가 통과 한 기본 클래스를 사용합니다.
따라서 현재 내 addnew () 메소드에는 다음이 포함됩니다.
public T AddNew()
{
T added = Activator.CreateInstance<T>();
this.Collection.Add(added);
return added;
}
데이터 제공 업체 네임 스페이스 외부에서 새로운 엔티티를 수동으로 인스턴스화 할 수 있다면 분명히 세상의 끝이 아니지만 저장할 수있는 방법이 없다는 점을 고려할 때 무의미한 것 같습니다. 왜 그렇게 할 수 있습니까?
편집 : 모든 제공 업체, 엔터티 등이 동일한 네임 스페이스에 있음을 언급하는 것을 잊었습니다.
해결책
공개 생성자에 의존하는 활성기를 사용하지 마십시오. 대신 반사를 사용하여 매개 변수가없는 생성자를 찾은 다음 호출하십시오. 이 라인을 따라 무언가 :
Type t = typeof(MyType);
var parameterlessCtor = (from c in t.GetConstructors(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
where c.GetParameters().Length == 0
select c).FirstOrDefault;
if(parameterlessCtor != null) instance = parameterlessCtor.Invoke(null);
제휴하지 않습니다 StackOverflow