无法统一注入复杂类型到 web api 2

Unable to inject with unity a complex type to web api 2

我有一个复杂的类型要注入到 webapi 控制器中,但我无法解决此依赖关系

 public class MyController(IMyComplexType)

IMyComplexType 的实现至少有 5 个依赖项 I1, ... I5(因此它的实现收到 I1...I5

我有一个 Bootstrapper class 来注册所有依赖项,下面是一段代码向您展示

    public class Bootstrapper
    {
        public static IUnityContainer ConfigureContainer(ref IUnityContainer container)
        {
            container.RegisterType<IMyComplexType, MyComplexTypeImplementation>
            (
              new HierarchicalLifetimeManager()
            );

            //Registering I1...I5 in the same way with their implementations
        }
     }

我试图直接加载 Assmebly,所以 I1...I5 驻留在 assembly1 中,在我的 ConfigureContainer 方法

的开头
Assembly.Load("assembly1");

我还有一个 UnityResolver 复制自:WebApi dependency injection

这是我的 WebApiConfig:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            IUnityContainer container = new UnityContainer();
            Bootstrapper.ConfigureContainer(ref container);
            config.DependencyResolver = new UnityResolver(container);

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

我还尝试删除控制器上的注入构造函数,并在 Post 方法中放入如下内容:

var service = Container.Resolve<IMyComplexType>() or var service = Container.Resolve<MyComplexTypeImplementation>()

我在这里丢东西了?

先注册所有的构造函数类型,再注册其余的。

HttpContext.Current.Application.SetContainer(container);
container.AddNewExtension<Interception>();
c.RegisterType<IYourType,YourType>();
...
futher constructor types here
...
c.RegisterType<IMyComplexType,MyComplexType>();

c.RegisterType<IMyController, MyController>(
            new HierarchicalLifetimeManager(), 
            new InjectionConstructor(typeof(IMyComplexType)));

然后

public static class WebApiBootstrapper
    {
        public static void Init(IUnityContainer container)
        {
            GlobalConfiguration.Configure(config =>
            {
                config.DependencyResolver = new WebApiDependencyResolver(container); // DI container for use in WebApi
                config.MapHttpAttributeRoutes();
                WebApiRouteConfig.RegisterRoutes(RouteTable.Routes);
            });
        }
    }