我在把握依赖注入时遇到了问题(或者让我说它的好处)。因此,我决定编写两个简单的代码,一个不带DI,另一个不带DI。
所以我有A类
public class A {
public void foo(){
B b = new B();
b.fooB();
}
}
从上面的A可见,取决于B,B就是
public class B {
public void fooB(){
Log.e("s", "y");
}
}
我们可以使用A like
public void do(){
A a = new A();
a.foo();
}
但是,据说A不应因为依赖它而简单地初始化B,但是我们应该拥有一个在两个类之间具有某种契约的服务。例如,如果我错了,请告诉我
让我们有一个BService接口
public interface BService {
void fooB();
}
B变成DiB
public class DiB implements BService {
@Override
public void fooB(){
Log.e("s", "y");
}
}
A变成DiA
public class DiA {
BService bService;
public DiA(BService bService){
this.bService = bService;
}
public void foo(){
bService.fooB();
}
}
我们可以使用A like
public void dIdo(){
BService service = new diB();
diA a = new diA(service);
a.foo();
}
所以我读到DI的好处是:
这两个代码似乎都可以正常工作,我无法理解一个相对于另一个的好处,只是另一个更复杂。因此,请您进一步启发我了解这个简单的A和B类所带来的好处。我没有得到什么?
答案 0 :(得分:0)
首先,我不同意您的“据说A不应简单地初始化B,因为它依赖于它” ..因为相同的代码在.NET中对我有用
class Program
{
static void Main(string[] args)
{
A aobj = new A();
aobj.foo();
}
}
public class A {
public void foo()
{
B bojb = new B();
bojb.fooB();
Console.WriteLine("From A.foo() ..");
Console.ReadLine();
}
}
public class B {
public void fooB()
{
Console.WriteLine("From B.fooB() ..");
Console.ReadLine();
}
}
除此之外,猜想您对依赖注入的基础感到困惑。依赖词本身可以传达任何类的注入源。
建议您在结案之前阅读更多内容。