为什么在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 Container中注册一个只有一个类型参数的泛型类型会失败?

再次查看文档,我认为您希望在别名目标中对打开类型使用反引号或方括号,但不用于关闭类型或别名本身:

<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>