【问题标题】:Generics passing type parameters [duplicate]泛型传递类型参数[重复]
【发布时间】:2018-12-27 07:11:14
【问题描述】:

我正在使用 Unity 的依赖注入。即 Unity.Mvc5。我从各种程序集中获取所有类型

Assembly assembly = Assembly.LoadFrom(string.Format("{0}\\{1}", AppStartPath, containerElement.InterfaceAssembly));
Assembly assembly2 = Assembly.LoadFrom(string.Format("{0}\\{1}", AppStartPath, containerElement.ConcreteClassAssembly));
Type type = assembly.GetType(containerElement.InterfaceName);
Type type2 = assembly2.GetType(containerElement.ConcreteClass);

现在,当我传递类型时,以下工作:

  container.RegisterType<IWarehouseBinController, WarehouseBinController>();

但这不是

container.RegisterType<type.GetTypeInfo().GetType(), type2.GetTypeInfo().GetType()>();

有人知道为什么或如何解决它吗?基本上我想在 ASP.Net MVC 站点中使用它。

【问题讨论】:

  • A Type 实例不是通用参数,这就是它不起作用的原因。我相信有一个 method 接受 Type 对象而不是通用参数。
  • 是的。这是重复的

标签: c# asp.net-mvc generics dependency-injection


【解决方案1】:

裁判这个link你可以看到你如何做所有类型的动态注册 依赖关系甚至泛型类型,但请注意使用 autofac 库的示例,但我相信它们都是相同的。

  var builder = new Autofac.ContainerBuilder();
var assembly = Assembly.GetExecutingAssembly();
var assemblyTypes = assembly.GetTypes();

foreach (var type in assemblyTypes)
{
    // Ignore interfaces
    if (type.IsInterface)
        continue;

    var typeInterfaces = type.GetInterfaces();

    // Class should implement IDependecy or ISingletonDependency
    if (!typeInterfaces.Any(i => i.IsAssignableFrom(typeof(IDependency))))
        continue;

    var registration = builder.RegisterType(type).AsImplementedInterfaces();

    if (typeInterfaces.Any(i => i.IsAssignableFrom(typeof(ISingletonDependency))))
        registration.SingleInstance();
    else
        registration.InstancePerRequest();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2019-02-27
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多