好吧,我认为这是可能的,但不确定如何做到。这是我的场景:我有 2 个服务,一个依赖于另一个,如下所示:
public interface IServiceA {
//...
}
public interface IServiceB {
//...
}
//the actual implementation
public class ServiceA : IServiceA {
//...
}
public class ServiceB : IServiceB {
readonly IServiceA _serviceA;
public ServiceB(IServiceA serviceA){
_serviceA = serviceA;
}
}
我有另一个类使用这两种服务:
public class MyConsumer {
readonly IServiceA _serviceA;
readonly IServiceB _serviceB;
public MyConsumer(IServiceA serviceA, IServiceB serviceB){
_serviceA = serviceA;
_serviceB = serviceB;
}
}
所以在这里我想serviceB用什么解决的注入serviceA在此构造这里的权利MyConsumer。(意味着serviceA注入的ServiceB应该正是serviceA注入的实例MyConsumer——而不是一些新的不同实例)。需要注意的是:我不希望暴露ServiceA通过ServiceB,也将让MyConsumer依赖于IServiceB唯一的(实际上ServiceA是基本服务,而其他服务,包括ServiceB只是延长,意味着可能会有更多的服务,如ServiceB在这种情况下)
我对 Autofac 真的很陌生,甚至使用 Unity(我用的最多)我以前从未想过这种情况,所以到目前为止我真的没有任何代码。
我希望这里有人以前遇到过同样的情况,可以给我一些建议,谢谢!
额外问题:如果参数(传入的MyConsumer构造函数)的顺序改变了怎么办?我的意思是这会影响解析顺序并导致意外结果吗?如果可能,参数顺序应该无关紧要(因为它MyConsumer应该只关心它需要什么,而不是它需要的东西是如何排序的)。
问题的大图:有些人建议在defined scope某些情况下使用autofac 支持的内容。但是我这里的场景不同,我认为强制 autofac 理解我想要的东西不是很方便。
在MyConsumer这里实际上可能永远不会被直接(使用解决.Resolve方法),因为它可能只是另一个类的依赖(这就是我们所说.Resolve的)。通过使用scope convention,我认为这是正确的方法,但在我的情况下,范围是不同的,我认为它是由类的构造函数自然定义的(注入的所有依赖项都应该在同一范围内 - 并且该范围内类型的每个实例都应该是一个单身人士 - 在他们之间共享)。不知道为什么 Autofac 可以为我们提供的内容中缺少这一点。
呼啦一阵风
相关分类