Activator.CreateInstance (string, string)에 대한 호출을 컴파일 된 람다로 바꾸려고합니다.Activator.CreateInstance를 컴파일 된 람다로 바꾸기
여기 또는 웹에서 많은 샘플을 볼 수 있지만 유형은 항상 컴파일 된 시간에 알려집니다. 내 캐쉬에서는 호출 코드와 유형이 별도의 라이브러리에 있습니다.
System.Windows.Window myObject=
(System.Windows.Window)Activator.CreateInstance("MyLibrary", "MyLibrary.MyType")
.Unwrap();
중요 사항 :
원래의 소스 코드
는 다음과합니다 MyType은 항상 System.Windows.Window에서 유래.나는 컴파일되지 않습니다 다음 코드로 붙어 :
Type receptionPanelViewType = Type.GetType("MyLibrary.MyType,MyLibrary");
ConstructorInfo ctor = receptionPanelViewType.GetConstructor(Type.EmptyTypes);
var delegateType = typeof(Func<System.Windows.Window>).MakeGenericType(receptionPanelViewType);
var lambda = System.Linq.Expressions.Expression.Lambda(delegateType, System.Linq.Expressions.Expression.New(ctor));
var constructor = lambda.Compile();
System.Windows.Window receptionPanelView = constructor();
오류는 '생성자'입니다 '변수'이지만 '방법'처럼 사용된다.
도움을 주시면 감사하겠습니다.
업데이트 1 : 목표는 가장 빠른 코드를 사용하는 것입니다. 물론 컴파일 된 람다를 캐시 할 것입니다. 메서드에서이 코드를 리팩터링하는 경우 매개 변수가됩니다.
실제로 더 간단하고 읽기 쉬운 코드를 사용하고 싶지 않은 이유는 무엇입니까? 공장? –
그 개체를 만드는 가장 빠른 방법이 필요합니다. 질문이 업데이트되었습니다. –