【发布时间】:2021-09-11 14:15:09
【问题描述】:
我喜欢依赖注入 (DI) 的想法,但是当我尝试在现实世界的示例中使用 DI 时,我总是碰壁。 在类的实例(MyParentClass)中处理时,我经常想将任何“特殊”处理传递给类的实例(MyChildClass)。通常我想在该子类中使用 DI 实例(MyStringManipulator)。 我发现实现这一点的唯一工作方法是将该 DI 实例(MyStringManipulator)传递给我的类库中的整个父->子实例链。 似乎应该有一个更简单/更好的方法。 谢谢你的帮助。
public class MyParentClass
{
public string ManipulateString( string s)
{
MyChildClass my = new MyChildClass();
return my.Process(s);
}
}
public class MyChildClass
{
MyStringManipulator _manipulator = null;
public MyChildClass (MyStringManipulator manipulator )
{
_manipulator = manipulator;
}
public string Process( string s)
{
return _manipulator.Manipulate(s);
}
}
【问题讨论】:
-
您是否考虑过将
MyChildClass也注入MyParentClass? -
如果您想知道如何设置 DI,您可以向您的库添加一个扩展方法,为库内的依赖项设置 DI。在消费应用程序中,您然后执行
services.AddMySuperDuperLibrary();之类的操作,仅此而已。 (我假设您使用的是 MS Dependency Injection,但也可以使其与 Ninject 或 AutoFac 等其他容器框架一起使用) -
@KellyHarris 根据提供的答案,您的问题似乎有些混乱。所以我建议你编辑问题以澄清事情
-
只需将其作为构造函数参数即可。每件事都应该在组合根中进行配置和传递。我认为您关注的是错误的事情,或者对如何应用 DI 感到困惑。
标签: winforms asp.net-core dependency-injection