shown here과 비슷한 방식으로 플러그인을로드하려고하지만로드 된 어셈블리가 동일한 컨텍스트를 공유하지 않는 것처럼 보입니다.Structuremap을 통해 어셈블리를로드하는 중 컨텍스트
문제를 해결하기 위해 나는 두 개의 어셈블리가 포함 된 작은 스파이크를 만들었습니다. 하나의 콘솔 앱과 하나의 라이브러리. 콘솔 앱에는 IPlugin 인터페이스가 포함되어 있으며 플러그인 DLL에 대한 참조가 없습니다.
나는 사용자 정의 등록 규칙을 사용하여 플러그인 디렉토리를 스캔하고 있습니다 :
"IPlugin에 플러그인 형식을 변환 할 수 없습니다"라는 잘못된 캐스트 예외를 슬로우하는ObjectFactory.Initialize(x => x.Scan(s =>
{
s.AssembliesFromPath(@"..\Plugin");
s.With(new PluginScanner());
}));
public void Process(Type type, Registry registry)
{
if (!type.Name.StartsWith("P")) return;
var instance = ObjectFactory.GetInstance(type);
registry.For<IPlugin>().Add((IPlugin)instance);
}
. 난 그냥 (그런데 잘 작동) 인스턴스를 구성하고 플러그인 ObjectFactory.WhatDoIHave()에서 ObjectFactory를 액세스하려고하면 또한
는 인스턴스를 플러그인과 인스턴스를 호스트하는 경우에도 동일한 컨테이너를 공유하지 않는 것을 보여줍니다 예.
MEF, Structuremap을 사용하여 실험하고 Assembly.Load ("플러그인")가 수동으로로드되어 어셈블리를로드하면 Assembly.Load가로드되어 있으면 제대로 작동합니다. 어떤 아이디어를 어떻게 구조체 맵 스캐닝과 함께 작동하도록 고칠 수 있습니까?