是否有可能在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允许您注册特定的方法作为工厂解析器方法,这些方法将允许您在解析接口时构造您的类型。
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
的具体类型。