使用 Reflection 的 Unity 寄存器类型

Unity register types using Reflection

我正在尝试执行以下操作:

foreach (var item in Assembly.GetExecutingAssembly()
                             .GetTypes()
                             .Where(i => i.GetInterfaces()
                             .Contains(typeof(ITabItem))))
{
    container.RegisterType<ITabItem, item>(nameof(item));
}

但我在 RegisterType 方法中的 item 上收到此错误:

错误 CS0118 'item' 是一个变量,但像类型一样使用

我知道我正在传递一个对象类型,但我该如何解决这个问题?

编辑:这是有效的非动态方式。

container.RegisterType<ITabItem, AdminViewModel>(nameof(AdminViewModel));
container.RegisterType<ITabItem, OwnerViewModel>(nameof(OwnerViewModel));

您需要使用非泛型 RegisterType,它可能看起来像这样:

container.RegisterType(typeof(ITabItem), item, item.FullName);