我試圖在統一中註冊一個通用庫。我寧願使用反射在引導程序中執行此操作。在Unity中註冊具有反射的泛型
我已經成功實現並測試這個:
container.RegisterType(typeof(MyDll.Repositories.IRepository<>), typeof(MyDll.Repositories.Repository<>), "MyDllRepository");
然後解析:
var result = target.Resolve(typeof(My.Repositories.IRepository<MyClass>), "MyDllRepository");
的偉大工程。我不喜歡的是我需要在Bootstrapper解決方案中明確引用MyDll。
當我嘗試和註冊信息庫自動使用反射我的引導程序中,像這樣:
private void RegisterDlls(String assembly)
{
var currentAssembly = Assembly.LoadFrom(assembly);
var assemblyTypes = currentAssembly.GetTypes();
var baseName = GetBaseName(currentAssembly.FullName);
foreach (var assemblyType in assemblyTypes)
{
if (assemblyType.IsInterface)
{
continue;
}
if (assemblyType.FullName.EndsWith("Service"))
{
foreach (var requiredInterface in assemblyType.GetInterfaces())
{
if (requiredInterface.FullName.EndsWith("Service"))
{
var typeFrom = assemblyType.GetInterface(requiredInterface.Name);
var typeTo = assemblyType;
RegisterType(typeFrom, typeTo, true, typeTo.Name);
}
}
}
if (assemblyType.Namespace.EndsWith("Repositories"))
{
foreach (var requiredInterface in assemblyType.GetInterfaces())
{
if (requiredInterface.Namespace.EndsWith("Repositories"))
{
var typeFrom = assemblyType.GetInterface(requiredInterface.Name);
var typeTo = assemblyType;
string registerName = String.Concat(baseName, "Repository");
_container.RegisterType(typeFrom, typeTo, registerName);
}
}
}
在解決我得到異常:
Microsoft.Practices.Unity.ResolutionFailedException是由用戶代碼未處理 Message =解析依賴失敗,type =「MyDll.Repositories.IRepository 1[MyDll.Models.MyClass]", name = "MyDllRepository". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, MyDll.Repositories.IRepository
1 [MyDll.Models.MyClass],是一個接口,不能構建。 210任何想法?
public class Repository<TModel> : IRepository<TModel> where TModel : class, IModel
{
[Dependency("MyDllDataProvider")]
public IMyDllDataProvider _dataProvider { get; set; }
...
}
謝謝。我會試一試。我將首先需要更新到Unity 3.x,我仍然使用Unity 2.0 – user1337493 2015-02-11 19:26:20