我正在为我的应用程序使用依赖注入模式而没有任何IoC容器.现在我决定使用一些IoC容器,因为我的Composition Root由数千行代码组成,但我没能使它与我的类一起使用,它们主动使用方差.例如以下界面
public interface IQuery<in TIn, out TOut>
{
IReadOnlyCollection<TOut> Get(TIn key);
}
Run Code Online (Sandbox Code Playgroud)
和服务
public class FakeRepository : IQuery<object, string>
{
public IReadOnlyCollection<string> Get(object key)
{
return new[] { key.ToString() };
}
}
Run Code Online (Sandbox Code Playgroud)
纯DI工作正常
IQuery<string, object> service = new FakeRepository();
Run Code Online (Sandbox Code Playgroud)
但是Autofac和DryIoc都无法解决它.
service = autofacContainer.Resolve<IQuery<string, object>>(); // exception
service = dryIocContainer.Resolve<IQuery<string, object>>(); // exception
Run Code Online (Sandbox Code Playgroud)
我需要一些额外的设置吗?有没有其他IoC容器支持这个?我问得太多了吗?