我正在爲我的wcf服務使用WCF ServicehostFactory,並使用接口爲服務和存儲庫/ DAL實例化提供統一。WCF Servicefactory中的Assembly.LoadFrom(程序集路徑)
我想將程序集加載到我的appdomain中(在實例化服務之前),其類型在我的web.config中爲Unity DI註冊。
<assembly name="Customer.DAL.AdventureWorks"/>
<assembly name="Customer.DAL.Blogger"/>
<assembly name="Customer.Interfaces"/>
<assembly name="Customer.DAL"/>
<namespace name="Customer.Interfaces.Repository"/>
<namespace name="Customer.DAL.AdventureWorks"/>
<namespace name="Customer.DAL.Blogger"/>
<container>
<register type="Customer.Interfaces.DAL.IDal, Customer.Interfaces" mapTo="Customer.DAL.API, Customer.DAL">
<lifetime type="transient"/>
</register>
<register type="Customer.Interfaces.Repository.IRepositoryDepartment, Customer.Interfaces" mapTo="Customer.DAL.AdventureWorks.RepositoryDepartment, Customer.DAL.AdventureWorks">
<lifetime type="transient"/>
</register>
<register type="Customer.Interfaces.Repository.IRepositoryBlogs, Customer.Interfaces" mapTo="Customer.DAL.Blogger.RepositoryBlogs, Customer.DAL.Blogger">
<lifetime type="transient"/>
</register>
</container>
,我使用以下代碼來加載組件:
Assembly.LoadFile("C:\xxxxx\Customer.DAL.dll"); // loaded from somewhere on disk.
我已驗證逆水程序域的加載組件的存在和該組件被成功加載。 之後立即嘗試使用統一註冊服務類型,但我得到以下例外: 無法解析類型名稱或別名Customer.DAL.API,Customer.DAL。請檢查您的配置文件並驗證此類型的名稱。
那麼爲什麼類型「Customer.DAL.API」不能解決?
編輯:我並行運行FusionLog並找出失敗的程序集綁定。 爲什麼它實際上搜索程序集,導致這個程序集已經被我用上面提到的反射加載?!
EDIT-II: @Tuzo: 我閱讀了您發佈的所有文章。 而且試過如下:
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
AssemblyName asname = AssemblyName.GetAssemblyName(@"C:\xxxx\KM_Solution\Customer.DAL\bin\Debug\Customer.DAL.dll");
return Assembly.Load(asname);
}
但我仍然得到例外。我檢查了AppDomain.CurrentDomain.GetAssemblies(),我可以找到我的程序集,但仍然會拋出Unity無法解析類型的異常...
好吧,當我改變輸出路徑的dll到我的WCF SVC的bin路徑那麼它就行得通,但這不是我問題的答案。 爲什麼Unity在程序集已經加載到當前appdomain的時候在某處搜索它。 Unity不檢查程序集是否已經加載... – Legends
也許'Customer.DAL.dll'還有其他未解決的依賴關係? –