无法统一注入复杂类型到 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);
});
}
}
我有一个复杂的类型要注入到 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);
});
}
}