使用 Unity IoC DI 容器编写自定义 DependencyResolver
Writing custom DependencyResolver using Unity IoC DI Container
我有一个 class、A
,它在其构造函数中接受一个参数 HttpSessionStateBase
。
在另一个 class 中,B
实现了一个接口 InterfaceB
,将使用 A
来构造自己。
如何编写代码才能将 B
注入到我的控制器中?
目前,这是执行 DI 寄存器内容的 AddBinding 方法:
public void AddBinding()
{
container.RegisterType<IService1, Service1Impl>();
container.RegisterType<IService2, Service2Impl>();
}
如果 A (Service1Impl)、B (Service2Impl) 都在您的容器中注册,并且您的控制器使用该容器进行控制反转,则 B 将被解析。
你的 unity 注册看起来像这样,使用 InjectionFactory:
container.RegisterType<HttpSessionStateBase>(
new InjectionFactory(x => new HttpSessionStateWrapper(System.Web.HttpContext.Current.Session)));
container.RegisterType<IService1, Service1Impl>();
container.RegisterType<IService2, Service2Impl>();
我用 classes/interfaces 测试过这个,看起来像这样:
public interface IService1 { }
public interface IService2 { }
public class Service1Impl : IService1
{
public Service1Impl(HttpSessionStateBase ctx)
{
}
}
public class Service2Impl : IService2
{
public Service2Impl(IService1 service1)
{
}
}
我有一个 class、A
,它在其构造函数中接受一个参数 HttpSessionStateBase
。
在另一个 class 中,B
实现了一个接口 InterfaceB
,将使用 A
来构造自己。
如何编写代码才能将 B
注入到我的控制器中?
目前,这是执行 DI 寄存器内容的 AddBinding 方法:
public void AddBinding()
{
container.RegisterType<IService1, Service1Impl>();
container.RegisterType<IService2, Service2Impl>();
}
如果 A (Service1Impl)、B (Service2Impl) 都在您的容器中注册,并且您的控制器使用该容器进行控制反转,则 B 将被解析。
你的 unity 注册看起来像这样,使用 InjectionFactory:
container.RegisterType<HttpSessionStateBase>(
new InjectionFactory(x => new HttpSessionStateWrapper(System.Web.HttpContext.Current.Session)));
container.RegisterType<IService1, Service1Impl>();
container.RegisterType<IService2, Service2Impl>();
我用 classes/interfaces 测试过这个,看起来像这样:
public interface IService1 { }
public interface IService2 { }
public class Service1Impl : IService1
{
public Service1Impl(HttpSessionStateBase ctx)
{
}
}
public class Service2Impl : IService2
{
public Service2Impl(IService1 service1)
{
}
}