Assembly assembly = Assembly.LoadFrom("Logic\\bin\\Debug\\Logic.dll");
Type queryManagerType = assembly.GetType("Logic." + HttpContext.Current.Session["lang_name"] + "SearchQueryManager");
var queryManager = (ISearchQueryManager)Activator.CreateInstance(queryManagerType);
public interface ISearchQueryManager
{
IList<Advertisements> ApplyQueries(string searchQuery, int page, int pageSize, string orderBy, out int count);
}
public class SlovenianSearchQueryManager : ISearchQueryManager
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我明白了
无法将"Logic.SlovenianSearchQueryManager"类型的对象强制转换为"Logic.ISearchQueryManager".
编辑:整个堆栈跟踪
用户代码未处理System.InvalidCastException
消息="无法将类型为'Logic.SlovenianSearchQueryManager'的对象强制转换为'Logic.ISearchQueryManager'."
Source ="ViaMura.Web.Module"
StackTrace:位于D:\ PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web中的ViaMura.Web.Module.WebController.GetAdvertismentsByRawQuery(String rawQuery,Int32 page,Int32 pageSize,String orderBy,Int32&count) .Module\WebController.cs:D:\ PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web.Module\Views\SearchResultsPresenter中的ViaMura.Web.Module.Views.SearchResultsPresenter.OnResultsLoad(Int32页面,Int32 pageSize,String orderBy)第32行.cs:第43行在ViaMura.Web.SearchResults.SearchAdvertisments()中的D:\ PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web\SearchResults.aspx.cs:第155行,位于ViaMura.Web.SearchResults.Page_Load(Object sender,EventArgs) e)在系统中的System:Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)的D:\ PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web\SearchResults.aspx.cs:第149行.位于ViaMura.Web.App_C的System.Web.UI.Control.OnLoad(EventArgs e)上的Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)系统中System.Web.UI.Control.LoadRecursive()的D:\ PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web\App_Code\PageControllers\BasePage.cs:第89行中的ode.PageControllers.BasePage.OnLoad(EventArgs e). Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)
InnerException:
EDIT2:
string a1 = typeof (ISearchQueryManager).Assembly.Location;
string a2 = typeof(SlovenianSearchQueryManager).Assembly.Location
Run Code Online (Sandbox Code Playgroud)
给我相同的结果:
C:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\5438a399\53975f83\assembly\dl3\0f9540b5\15407fe2_5db7cb01\Logic.DLL
但
string a3 = queryManagerType.Assembly.Location;
Run Code Online (Sandbox Code Playgroud)
给了我不同的路径:
d:\ PROJEKTI \履带\ WebCrawlerSuite\WebCrawler.Logic\BIN \调试\ WebCrawler.Logic.dll
根据我的经验,像这样的类型不匹配问题总是由两个不同位置的加载类型引起,即使您认为它们应该从同一个地方加载.
比较:两种类型不应该相等
尝试查看调试器中每种类型的Assembly.Location属性:
typeof(ISearchQueryManager).Assembly.Location
typeof(SlovenianSearchQueryManager).Assembly.Location
Run Code Online (Sandbox Code Playgroud)