相关疑难解决方法(0)

如何避免依赖注入构造函数的疯狂?

我发现我的构造函数开始看起来像这样:

public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )
Run Code Online (Sandbox Code Playgroud)

随着参数列表不断增加.由于"容器"是我的依赖注入容器,为什么我不能这样做:

public MyClass(Container con)
Run Code Online (Sandbox Code Playgroud)

每个班级?有什么缺点?如果我这样做,感觉我正在使用一个美化的静电.请分享您对IoC和依赖注入疯狂的看法.

c# java dependency-injection ioc-container inversion-of-control

288
推荐指数
4
解决办法
6万
查看次数

如何减少控制器上注入的依赖项数量

我正在使用MVC3,Entity Framework v4.3 Code First和SimpleInjector.我有几个简单的类看起来像这样:

public class SomeThing
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个看起来像这样的实体:

public class MainClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual AThing AThingy { get; set; }
    public virtual BThing BThingy { get; set; }
    public virtual CThing CThingy { get; set; }
    public virtual DThing DThingy { get; set; }
    public virtual EThing EThingy { …
Run Code Online (Sandbox Code Playgroud)

dependency-injection asp.net-mvc-3 simple-injector entity-framework-4.3.1

7
推荐指数
1
解决办法
513
查看次数

Windows 窗体中可以避免构造函数过度注入吗?

我有一个 Windows 窗体。它包含许多控制器:网格、按钮,甚至TreeView. 其中大多数都定义了事件。例如,有多个独立事件以独立方式查询或命令我的 SQL 服务器。对于几乎所有情况,接口隔离原则迫使我不要合并这些接口。

因为我正在进行依赖项注入,所以我的 Windows 窗体的构造函数被大量过度注入。我在表单的构造函数中有四个参数,仅用于单个网格。示例包括:网格的初始填充、查询其中一个单元格中组合框的值列表、当另一种类型更改时重新填充某些类型的单元格等。我认为用不了多久我的构造函数就会有一些东西荒谬的是,像 20 个参数,所有查询服务器的接口。

这在 Windows 窗体中可以避免吗?据猜测,我认为如果我能够以某种方式构建每个组件,然后将它们输入到我的构造函数中,而不是让我的表单了解每个组件的依赖关系,我会更好。也就是说,我想我宁愿替换

MyForm(IQueryGridTimes TimeQueryRepo, ICommandGridTimeCells TimeCommandRepo, IQueryTheWholeGrid GridInitialPopulator, ..., IQueryForTheTreeView TreeViewPopulator)
Run Code Online (Sandbox Code Playgroud)

var grid = new WhateverGrid(IQueryGridTimes TimeQueryRepo, ICommandGridTimeCells TimeCommandRepo, IQueryTheWholeGrid GridInitialPopulator)
var tress = new WhateverTreeview(QueryForTheTreeView TreeViewPopulator)
MyForm(grid, ..., trees,)
Run Code Online (Sandbox Code Playgroud)

这既明智又可能吗?我对其他方法持开放态度,不需要假设任何依赖注入容器(我宁愿不使用任何容器)。

.net c# dependency-injection winforms constructor-injection

6
推荐指数
1
解决办法
239
查看次数