문제

엔티티 모음이 포함 된 데이터 제공 업체가 있습니다. 데이터 제공 업체를 통해 새로운 엔티티 만 만들 수 있기를 원합니다.

즉, 새로운 레코드를 만들려면 사용해야합니다.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top