但是,由于某种原因,如果我决定使用 Structuremap,那么我的整个服务层都需要更改。
这不是真的。如上一个线程所示,服务层对 DI 框架一无所知。
您应该有一个名为composition root
. 这是唯一了解 DI 框架和所有底层的层。这是你在做作文的地方。因此,如果您更改 DI 框架,您唯一需要进行更改的地方就是组合根。
因此,您绝对应该摆脱kernel.Get<>
来自您的服务的呼叫。现在您使用的是Service Locator而不是Dependency Injection。服务定位器是一种反模式。您的服务层应如下所示:
public class MyService
{
private readonly ISomeDependency dependency;
public MyService(ISomeDependency dependency)
{
this.dependency = dependency;
}
public void SomeMethod()
{
// do something with the dependency here
}
}
代替:
public class MyService
{
private readonly ISomeDependency dependency;
public MyService()
{
this.dependency = kernel.Get<ISomeDependency>();
}
public void SomeMethod()
{
// do something with the dependency here
}
}