使用 Unity IoC DI 容器编写自定义依赖项解析程序

本文关键字:依赖 自定义 程序 IoC Unity DI 使用 | 更新日期: 2023-09-27 18:32:29

我有一个类,A,它在其构造函数中接受一个参数,HttpSessionStateBase

在另一个类中,B 实现了接口InterfaceB,将使用A来构造自身。

如何编写代码,以便将B注入控制器中?

目前,这里是执行 DI 寄存器操作的 AddBinding 方法:

public void AddBinding()
{
     container.RegisterType<IService1, Service1Impl>();
     container.RegisterType<IService2, Service2Impl>();      
}

使用 Unity IoC DI 容器编写自定义依赖项解析程序

如果 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>();

我已经用如下所示的类/接口对此进行了测试:

public interface IService1 { }
public interface IService2 { }
public class Service1Impl : IService1 
{
    public Service1Impl(HttpSessionStateBase ctx)
    {
    }
}
public class Service2Impl : IService2
{
    public Service2Impl(IService1 service1)
    {
    }
}