我将 WCF ServicehostFactory 用于我的 wcf 服务,并结合使用统一的服务和存储库/DAL 实例化接口。
我想将一个程序集加载到我的 appdomain 中(在实例化服务之前),其类型已在我的 web.config for 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.
我已经针对当前的 appdomain 验证了已加载程序集的存在,并且程序集已成功加载。紧接着,我尝试使用 unity 注册服务类型,但出现以下异常: 类型名称或别名 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 无法解析类型的异常...