我正在开发一个使用MS Application Blocks的项目。我看到'Unity'dll可供我使用。顺便说一句,这是1.1版本。我如何在这里使用依赖注入?
我有一个班级
public class ScheduleDataDetailsDC
{
public int ScheduleID;
public List<ScheduleRateLineItem> MinRateList;
public List<ScheduleRateLineItem> MaxRateList;
public List<ScheduleRateLineItem> VotRateList;
public List<ScheduleLOSRateDC> LosRateList;
public List<ScheduleRateParamsDC> RateParams;
}
所以当我新建的时候,我正在做这个......
new ScheduleDataDetailsDC{
LosRateList = new List<ScheduleLOSRateDC>()
, MaxRateList = new List<ScheduleRateLineItemDC>()
, MinRateList = new List<ScheduleRateLineItemDC>()
, RateParams = new List<ScheduleRateParamsDC>()
, VotRateList = new List<ScheduleRateLineItemDC>()
}
Unity 1.1可以帮助我吗?我希望能够使用var x = new ScheduleDetailsDC()
,并为我初始化这5个内部列表。 Unity可以为我做点什么吗?请注意我以前从未使用过DI。
感谢您的任何指示, 〜在圣地亚哥
答案 0 :(得分:2)
最好的办法是初始化构造函数中的列表,并通过将它们转换为属性来拒绝从其他类直接访问它们:
public class ScheduleDataDetailsDC
{
public ScheduleDataDetailsDC()
{
this.MinRateList = new List<ScheduleRateLineItem>();
//inialise other lists
}
public List<ScheduleRateLineItem> MinRateList { get; private set; }
...
}
似乎依赖注入在这里并不真正有用,因为类似乎是一个简单的数据容器,尽管没有更多的上下文很难判断。
答案 1 :(得分:0)
是Unity 可以帮助您,但我认为情况并非如此。您可以初始化列表,包括您的对象,为它们提供默认实例,Unity,因为任何其他IoC容器都不应该用作简单的对象构建器(尽管它可以)。
答案 2 :(得分:0)
我不确定Unity的1.1版本的细节是什么,但一般来说,无论何时使用Inversion of Control Container,都必须执行以下步骤:
ScheduleDataDetailsDC
,以及确切需要进入每个被视为依赖项的列表Get<T>()
或Resolve<T>
等方法。通常,您将要求“最高级别”类的实例,即在软件入口点附近使用的类。如果你这样做,并且已经为所有依赖类应用了依赖注入(并且你已经正确地注册了所有依赖类型),你应该得到一个提供了所有依赖项的对象,同样所有的对象依赖项。应该提供,并在线上。由于您可以将具体类型绑定到接口类型,然后将该接口指定为依赖项,因此您也倾向于将接口与IoC结合使用。这允许您在绑定过程中应用业务规则和配置值,这使您能够在需要执行此类操作的情况下使用不同的具体实现。
所以考虑到所有这一切,很难确切地说明在上面概述的情况下使用Unity会涉及到什么。首先,您需要注册ScheduleDataDetailsDC
,但为了获得依赖关系,您还需要注册每个List类型,或者更具体地说,每个列表中的每个具体对象(当然,所有这些类的依赖关系)。由于我不确定这些列表的作用是什么,所以我很难说你如何去做(或者即使你可以这样做)。