是否可以在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
方法以便调用上述方法以解决依赖关系?
答案 0 :(得分: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
。