我正在使用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网站中使用它。
答案 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();
}