1

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方法以便它调用上述方法以解决依赖关系?

4

1 回答 1

2

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.

于 2015-05-15T02:11:51.100 回答