在使用共享引用动态加载库时,我遇到了问题。我明白问题可能在哪里,但我真的不知道如何解决它。
我会尝试更好地解释我的问题,这是我的结构:
我有3个装配
我开始说我目前无法使用MEF。
" DataProviderAssembly"在语言上加载" AppAssembly"因为它有一个从" ContractsAssembly"实现IApp接口的类型。 按照下面的代码,当我尝试从App类调用方法OnSignRequest时,我得到一个MissingMethodException。似乎找不到该方法,但是,如果我删除" RestRequest"参数,一切正常。 我认为,该DLL的动态加载会遗漏一些依赖程序集的参考信息。
**ContractsAppAssembly**
public interface IApp {
void GetData();
}
public abstract class MainClassBase : IApp {
public virtual void GetData(){
//Do Stuff
}
protected void OnSignRequest(RestRequest request){
//calling sign request event
}
}
public abstract class SecondClassBase : MainClassBase {
// i need this because it overrides other methods i didn't specify here
}
**AppAssembly**
public class App : SecondClassBase {
public override void GetData(){
RestRequest request = new RestRequest();
base.OnSignRequest(request);//<-- this throws a MissingMethodException
}
}
**DataProviderAssembly**
public class DataProvider{
public DataProvider{
string[] appsLibs = Directory.GetFiles(appsFolderPath, "*.dll", SearchOption.TopDirectoryOnly);
foreach (string appLib in appsLibs)
{
Assembly appAssemlby = Assembly.LoadFrom(appLib);
Type appType = providerAssemlby.GetTypes().FirstOrDefault(t => t.GetInterface(typeof(IApp).Name, true) != null && !t.IsAbstract);
if (appType == default(Type))
{
continue;
}
try
{
IApp app = (IApp )Activator.CreateInstance(appType);
initApp(app);
this.apps.Add(app.Name, app);
}catch(Exception ex)
{
}
}
}
}
所有程序集都引用RestSharp.dll,构建结构如下:
Debug:
DataProviderAssembly.dll
Debug/Apps:
ContractsAppAssembly.dll
AppAssembly.dll
显然,DataProviderAssembly.dll具有&#34;探测&#34; app.config文件中的选项。
调试此代码我无法访问&#34; base.OnSignRequest&#34; App类中的代码行,但是,如果我声明虚拟方法&#34; OnSignRequest&#34;在MainClassBase内部,调试器让我到达那行代码,只有当我尝试执行时才会给出异常。