Activator.CreateInstance 을 찾을 수 없습니다 생성자(MissingMethodException)
-
03-07-2019 - |
문제
내가 있는 클래스가 다음 생성자
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
와 함께 기본 생성자이 없는 매개 변수입니다.
다음하는 인스턴스를 만들지만,그것은 단지없이 작동 매개변수:
var designer = Activator.CreateInstance(designerAttribute.Designer);
이 작지만 만약 내가 원하는 전달하는 매개변수하지 않:
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));
이 결과 MissingMethodException
:
생성자 voor 유형 Vialis.LightLink.컨트롤러입니다.시나리오.합니다.DelayCompositeDesigner 발견되지 않았
어떤 아이디어요?
문제는 내가 정말 필요가 전체 동안 건설입니다.
당신이 볼 나는 디자이너는 모든 형태로부터 상속되는 CompositeBase
.이들은 다음 목록에 추가에서는 사용자를 끌어들입니다.그렇게하의 인스턴스를 끌고 추가되는 디자이너.이러한 각각의 클래스는 사용자 정의 속성에 정의된다:
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
}
사용자 선택 품목에서는 디자이너,그것은 외모에서 이러한 특성하기 위해서드에 대한 디자이너는 유형입니다.예를 들어,의 경우에는 DelayComposite
그것은 것이드에 사용자 정의 컨트롤는 레이블 및 슬라이더를 허용하는 사용자를 설정하는 지연의 속성 DelayComposite
인스턴스입니다.
지금까지 잘 작동하지 않으면 나는 어떠한 매개 변수를 생성자입니다.디자이너의 인스턴스를 만듭니다 DelayCompositeDesigner
고 할당하는 콘텐츠의 재산 WPF ContentPresenter
.
그러나 그 이후 설계자의 요구를 충족하의 속성을 수정하고 선택한 DelayComposite
디자이너에서 내가 이스습니다.은 이유는 생성자를 보이는 거짓말을 이:
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
제안을 환영합니다
@VolkerK
결과의 코드입니다 이것:
<----foo Vialis.LightLink.컨트롤러입니다.시나리오.합니다.DelayCompositeDesignerVoid .ctor() Vialis.LightLink.컨트롤러입니다.시나리오.합니다.DelayCompositeDesignerVoid .ctor(Vialis.LightLink.컨트롤러입니다.시나리오.합니다.DelayComposite) param:Vialis.LightLink.컨트롤러입니다.시나리오.합니다.DelayComposite foo---->
Leppie,당신이 올바른지,나는 어떤 이유에서 참조 복합 재료는 어셈블리에서 나 UI 응용 프로그램...지 않는 무언가가 있어야로드 수 있습니다.다음 코드를 사용해야 합니다:
object composite = Activator.CreateInstance(item.CompositType,(byte)205);
var designer = Activator.CreateInstance(designerAttribute.Designer, composite);
당신이 볼 수 있는 코드가 없는 지식 DelayComposite
유형입니다.
이를 해결 현재의 문제만에서는 많은 새 사람을 위해 무엇을 달성하고 싶, 어느 방법으로 감사하고 고맙습니다 모든 사람에게 대답했다 여기에.
으로 다음과 같은 코드에 의해 제안된 여러 사용:
var designer = Activator.CreateInstance(
designerAttribute.Designer,
new object[] { new DelayComposite(4) }
);
이 Activator.CreateInstance
시그니처는 다음과 같습니다.
Activator.CreateInstance(Type type, params object[] obj)
그래서 그것을 받아들여야 합니 나의 코드,하지만 완료하려면 시간이 좀 걸릴 것입니다 제안 코드
업데이트:
나도 이 제안:
var designer = Activator.CreateInstance(designerAttribute.Designer, new object[] { new DelayComposite(4)});
결과 같습니다.
해결책
나는 생각을 다루고 형식과 불일치가 발생할 수 있습니다.
가능성이 어셈블리에서 참조하는 다른 장소,또는 그들이 컴파일되기 다른 버전입니다.
나는 당신을 반복하고 예의 및 수행 paramtype == typeof(DelayComposite)
에 적절한 매개 변수입니다.
다른 팁
내가 생각하는 당신의 통화가 필요하다:
var designer = Activator.CreateInstance(designerAttribute.Designer, new object[] { new DelayComposite(4) });
지 않으면,물론 그것은 가 는 경우에는 대답은 바로 명백합니다.
하지만 싫어 printf 같은 디버깅...
public static void foo(Type t, params object[] p)
{
System.Diagnostics.Debug.WriteLine("<---- foo");
foreach(System.Reflection.ConstructorInfo ci in t.GetConstructors())
{
System.Diagnostics.Debug.WriteLine(t.FullName + ci.ToString());
}
foreach (object o in p)
{
System.Diagnostics.Debug.WriteLine("param:" + o.GetType().FullName);
}
System.Diagnostics.Debug.WriteLine("foo ---->");
}
// ...
foo(designerAttribute.Designer, new DelayComposite(4));
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));
무엇을 하는 인쇄 visual studio 출력 창?
하려는 경우 이 contructor...
public DelayCompositeDesigner(DelayComposite CompositeObject)
...단지 이것을 사용:
var designer = Activator.CreateInstance(typeof(DelayCompositeDesigner), new DelayComposite(4));
나
var designer = Activator.CreateInstance<DelayCompositeDesigner>(new DelayComposite(4));
나는 유사한 문제,그러나 나의 문제 때문에 가시성 의 생성자입니다.Stack overflow 도왔:
내가 발견 또 다른 방법의 인스턴스를 만들지 않고 객체의 생성자를 호출하에서는 동안 모든 응답 다른 질문에 SF.
에 시스템입니다.런타임입니다.Serialization 네임스페이스 기능이 있습니다 FormatterServices.GetUninitializedObject(type) 는 개체를 만들지 않고 부르 생성자입니다.
을 살펴보면 그 기능에서 반사체 당신은 그것을 볼 수은 외부 전화입니다.지 않는 방법을 알고 마술 실제로 일어나고 있습니다.그러나 나았다는 증명을 자신의 생성자가 호출되지 않지만 객체를 인스턴스화됩니다.
다음을 사용할 수 있습니다 과부하에 CreateInstance:
public static Object CreateInstance(
Type type,
Object[] args
)
고 당신의 경우에 그것은 것(나는 생각한다):
var designer = Activator.CreateInstance(
typeof(DelayCompositeDesigner),
new object[] { new DelayComposite(4) }
);
내가 찾는 문제에 대한 해결책,힘들었습으로 동일한 문제입니다.
여기에는 나의 활성제:
private void LoadTask(FileInfo dll)
{
Assembly assembly = Assembly.LoadFrom(dll.FullName);
foreach (Type type in assembly.GetTypes())
{
var hasInterface = type.GetInterface("ITask") != null;
if (type.IsClass && hasInterface)
{
var instance = Activator.CreateInstance(type, _proxy, _context);
_tasks.Add(type.Name, (ITask)instance);
}
}
}
그리고 여기 나의 클래스를 활성화를 주었다는 것을 변경할 생성자 params 하는 개체의 유일한 방법은 나는 그것을 얻을 수 있습니다.
public class CalculateDowntimeTask : Task<CalculateDowntimeTask>
{
public CalculateDowntimeTask(object proxy, object context) :
base((TaskServiceClient)proxy, (TaskDataDataContext)context) { }
public override void Execute()
{
LogMessage(new TaskMessage() { Message = "Testing" });
BroadcastMessage(new TaskMessage() { Message = "Testing" });
}
}
을 때 저는 이 문제가 발생했을 사용하는 방법을 반환되는 매개 변수 목록에 연결하는 Activator.CreateInstance 및 그것의 다른 번호를 인수 이상 생성자의 개체고 만들 수 있습니다.