我有一个复杂的类型要注入webapi控制器,我无法解决这种依赖
public class MyController(IMyComplexType)
IMyComplexType
的实现至少有5个依赖项I1, ... I5
(因此其实现接收I1...I5
)
我有一个Bootstrapper类来注册所有依赖项,在一段代码下面显示
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");
我还从:WebApi dependency injection
复制了UnityResolver这是我的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 }
);
}
}
我还尝试删除我的控制器上的injecton构造函数,并在Post方法中添加如下内容:
var service = Container.Resolve<IMyComplexType>() or var service = Container.Resolve<MyComplexTypeImplementation>()
我在这里失去了什么?
答案 0 :(得分:1)
首先注册所有构造函数类型,然后注册其余类型。
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);
});
}
}