LightInject IoC容器通过自定义方法解析类型

本文关键字:自定义方法 类型 IoC LightInject | 更新日期: 2023-09-27 17:49:13

是否有可能在LightInject IoC解决基于一些自定义方法的类型?

例如解析器会调用这样的方法

public interface IMyType {}
public class MyEvenType : IMyType {}
public class MyOddType : IMyType {}
public static int Foo;    
public static IMyType ResolveType()
{
   if (Foo % 2 == 0)
       return MyEvenType;
   return MyOddType;
}

我该如何编写container.Register方法,以便它调用上述方法来解决依赖关系?

LightInject IoC容器通过自定义方法解析类型

LightInject允许您注册特定的方法作为工厂解析器方法,这些方法将允许您在解析接口时构造您的类型。

public class MyTypeResolver
{
    public static int Foo;    
    public static IMyType ResolveType()
    {
        if (Foo % 2 == 0)
            return new MyEvenType();
        return new MyOddType();
    }
}

注册接口时,不是注册到具体类型,而是注册到返回具体类型的工厂方法。

void Main()
{
    var container = new LightInject.ServiceContainer();
    container.Register<IMyType>(factory => MyTypeResolver.ResolveType());
    var instance1 = container.GetInstance<IMyType>();
    instance1.Dump();
    MyTypeResolver.Foo = 1;
    var instance2 = container.GetInstance<IMyType>();
    instance2.Dump();
}

instance1具有MyEvenType的具体类型,instance2具有MyOddType的具体类型。