2010-06-22 57 views
0

我的工作目前正使用的MS应用程序块的项目。我看到'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; 
} 

所以,当我新起来我这样做...

统一1.1可以帮助我反正这里?我想只能使用var x = new ScheduleDetailsDC(),并且这5个内部列表将为我初始化。 Unity能为我做些什么吗?请注意我以前从未使用DI。

感谢任何指针, 〜CK在圣地亚哥

回答

2

做将是初始化列表在构造函数中,并通过使它们成性拒绝从其他类向他们直接访问的最好的事情:

public class ScheduleDataDetailsDC 
{ 
    public ScheduleDataDetailsDC() 
    { 
     this.MinRateList = new List<ScheduleRateLineItem>(); 
     //inialise other lists 
    } 

    public List<ScheduleRateLineItem> MinRateList { get; private set; } 
    ... 
} 

这似乎并不认为依赖注入真的可以在这里使用,因为类似乎是一个简单的数据容器,虽然很难说没有更多的上下文。

0

是统一可以帮助你,但我认为这不是这种情况。你可以只初始化列表的前前后后对象给他们默认实例,团结与任何其他IoC容器不应该被用来作为一个简单的对象生成器(尽管它可以)。

0

我不知道具体是什么1.1版本统一的细节,但每当你使用控制容器的反转通常来说,你必须要经过以下步骤:

  1. 注册您的IoC容器(您的案例中的Unity)知道的类型。这包括您计划请求的所有主要类型,以及所有相关类型。在你的情况,你需要让它知道ScheduleDataDetailsDC,什么,究竟需要进入每一个被认为是依赖
  2. 你的类型应该指定所有必需的依赖构造函数的参数的列表。这是IoC容器将要查看的内容,以确定需要注入的内容。如果您有可选的依赖,那么你可以使用属性注入来支持(如果你的IoC容器支持的话,我认为统一所做的)
  3. 你必须要求你注册的类型从容器的一个实例。你怎么做这取决于你的容器。应该有像Get<T>()Resolve<T>这样的方法。通常,您将要求“最高级别”类的实例,即在您的软件入口点附近使用的实例。如果你这样做,你已申请依赖注入的所有相关类的路线(你正确地注册的所有相关类型的),你应该得到一个对象与它的所有供应的依赖,同样所有这些对象的依赖应该提供,并在下线。

也往往看到连同国际奥委会采用了大量的接口,因为你可以绑定一个具体类型的接口类型,然后指定接口的依赖。这允许您在绑定过程中应用业务规则和配置值,以便在需要执行此类操作的情况下使用不同的具体实现。

因此,考虑到所有这些,很难说在上述情况下使用Unity会涉及什么。首先,您需要注册ScheduleDataDetailsDC,但为了获得依赖关系,您还需要注册每个List类型,或者更具体地注册每个列表中的每个具体对象(然后,当然还有所有依赖关系这些类)。由于我不确定这些列表的作用是什么,因此我很难说出如何做到这一点(或者即使可以这样做)。