为什么在Unity Container中注册一个只有一个类型参数的泛型类型会失败?
本文关键字:类型参数 有一个 泛型类型 失败 一个 Container Unity 注册 为什么 | 更新日期: 2023-09-27 17:50:25
我试图通过配置文件注册一个泛型类型到unitycontainer,如下所示,以简化的方式。
然而,在LoadConfiguration方法调用我得到一个错误:
"类型名称或别名IDataLoader ' 1[Bar]无法解析。请检查您的配置文件并验证此类型名称。"
这是我得到异常后的行:
IUnityContainer container = new UnityContainer().LoadConfiguration();
这些是我的类(在与名称空间同名的程序集中):
namespace FooBar.DataManager
{
public interface IDataLoader<TSource>
{
void DoSomeWork(TSource source);
}
}
namespace FooBar.DataManager.MyDataManager
{
public class FooDataLoader : IDataLoader <Bar>
{
public void DoSomeWork(Bar source)
{
Console.WriteLine("Doing {0}", source.Name);
}
}
}
namespace FooBar.DomainModel
{
public class Bar
{
string Name {get; set;}
}
}
这是我在配置文件中注册的部分:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="Bar" type="FooBar.DomainModel.Bar, FooBar.DomainModel" />
<alias alias="IDataLoader`1" type="FooBar.DataManager.IDataLoader, FooBar.DataManager" />
<container>
<register type="IDataLoader`1[Bar]" mapTo="FooBar.DataManager.MyDataManager.DataLoader, FooBar.DataManager.MyDataManager" name="FooBarLoader" />
</container>
</unity>
你能告诉我如何注册IDataLoader泛型类型到unitycontainer吗?或者我在哪里犯了错?谢谢!
再次查看文档,我认为您希望在别名目标中对打开类型使用反引号或方括号,但不用于关闭类型或别名本身:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="Bar" type="FooBar.DomainModel.Bar, FooBar.DomainModel" />
<alias alias="IDataLoader" type="FooBar.DataManager.IDataLoader`1, FooBar.DataManager" />
<container>
<register type="IDataLoader[Bar]" mapTo="FooBar.DataManager.MyDataManager.DataLoader, FooBar.DataManager.MyDataManager" name="FooBarLoader" />
</container>
</unity>