도움이 필요하면 더 많은 리플렉션을 거치지 않고 클래스의 다른 위치에서 사용할 수있는 개체의 인스턴스를 만들고 싶습니다.호출 된 개체에서 메서드 호출
activator 또는 constructorInfo를 통해 개체를 만든 후에는 둘 다 인수를 읽었지만 액티베이터는 예를 들어 더 짧게 사용했습니다. 캐스트해야하지만 작동하지 않습니다. 예를 들어
는 다음에서 서버로 인스턴스를 캐스팅하는 방법을
System.InvalidCastException: [A]Server cannot be cast to [B]Server.
Type A originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context
'LoadFrom' at location 'C:\Program Files\test1\Shared.dll'.
Type B originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context 'Default' at location .
'C:\Program Files\test2\Shared.dll'
내가 던진 예외에 대한 이유를 이해하지만이 :
Server instance;
public void A()
{
Assembly loaded = Assembly.LoadFrom("C:\Program Files\test2\Shared.dll");
serverType = loaded.GetType("Server");
object obj = Activator.CreateInstance(serverType, new [] { "test" });
instance = (Server)obj;
}
public void B()
{
instance.startServer();
}
이 예외를 제공합니다 내가 원하는 유형, 즉 동적으로로드 된 DLL?
어셈블리 또는 기타 특정 코드로
Server
클래스로 전송하도록 지정해야합니다. 코드에서 'Server'는'test.dll '의'Server '와 다른가요? 또는 둘 다 같은 유형을 가리 킵니까? –죄송합니다. 코드 단축을 위해 test.dll을 제거하고 올바른 위치에서로드하려고 시도했습니다. – user1584120
내 질문을 이해하지 못했을 것 같습니다. 코드의 Server가 Shared.dll의 "Server"와 다른가요? 또는 둘 다 같은 유형을 가리 킵니까? –