泛型传递类型参数

时间:2018-12-27 07:11:15

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

我正在使用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网站中使用它。

1 个答案:

答案 0 :(得分:0)

参考此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();
}