单例模式与Unity中的ContainerControlled LifeTImeManager

时间:2010-09-12 02:45:38

标签: c# .net sql dependency-injection unity-container

数据库中的变化

1-从iC_ProductFeature表中删除了柱子尺寸

2 - 添加新表iC_ProductDimensions以保存产品的不同尺寸数据。以下是iC_ProductDimensions

中使用的不同列的详细说明
1- DimensionId - This is the primary key in the table and of bigint datatype.

2- UOMID -  (FK) Unit of Measurement ID , this is refrenced from the table iC_ProductUnitOfMeasure.

3- ProductFeatureId : This is referenced column from the iC_ProductFeature table.

4- NumericValue  : This column stores the dimensional value (e.g. if UOM is pound and this column stores 10 than we can say that Weight of product is 10 pound.

3-在iC_ProductUnitOfMeasure中添加了一列'MeasurementType'。

4-将ProductFeatureId的数据类型从varchar(100)

更改为Bigint

数据流

iC_ProductUnitOfMeasure中的'MeasurementType'将存储测量单位的测量值。

e.g. let's take a snapshot view of  rows in iC_ProductUnitOfMeasure 


    UOMID  Abbrivation         MeasurementType         Description 

    1              lb          Weight           This UOM is used for measuring weight of the product 
    2              inch.       Width            This UOM is used for measuring width of the product 
    3              meter       Length           This UOM is used for measuring length of the product 
    4              Kg          Weight           This UOM is used for measuring weight  of product  in Kg.

在上面的例子中,我们用关联的MeasurementType标记了每个UOM。

UOM 1可用于测量磅重的产品重量同样UOM 4可用于测量千克重量的产品重量。

添加产品长度为0.5米,产品宽度为50英寸,产品重量为100磅的产品。

1 - 在iC_Product表中创建记录以存储产品的常用属性。 (Suppopse ProductId = ICPR0001)

2-在iC_ProductFeature中创建记录并存储常用产品功能,如颜色,大小,s / w,h / w功能(如果有)。 (假设ProductFeatureId = 1)

3-在iC_ProductDimesion表中创建3条记录,如下所示。

DimensionID UOMID ProductFeatureId NumericValue 
1           1     1                100 
2           2     1                50 
3           3     1                0.5 

4-使用(ProductId = ICPR0001和ProductFeatureId = 1)在iC_ProductFeatureApplicability中添加记录

查询数据以获取产品ICPR001的不同尺寸值

select 

          product .* , 
          productFeature.* ,
          ( CAST (dimension.NumericValue  as Varchar(100) )+" " + UOM.Abbrivation) as Dimension ,
          dimension.MeasurementType

         from 
                iC_Product product , 
                iC_ProductFeature productFeature , 
                iC_ProductFeatureApplicability , 
                iC_ProductDimesions dimension , 
                iC_ProductUnitOfMeasure UOM

where

 iC_ProductFeatureApplicability.ProductId = product.ProductId  

and 

 iC_ProductFeatureApplicability.ProductFeatureId = productFeature.ProductFeatureId 

and 

dimension.ProductFeatureId = productFeature.ProductFeatureId 

and 

dimension.UOMID= UOM.UOMID

and 

 product.ProductId = 'ICPR001'        

2 个答案:

答案 0 :(得分:2)

一个真正的单例只能被实例化一次(每个线程,在某些实现中)。

Unity生命周期管理只是让Unity始终返回相同实例的一个选项;该实例不太可能实际设计为单例,因此原则上您仍可以手动创建其他实例。

有关区别的更多信息,请参阅我对this question的回答。

答案 1 :(得分:0)

单例模式就是模式本身 - Unity只是在几个地方实现该模式(包括大多数终身经理)。

根据定义,单身人士无法模仿 - 他们被设计为只有一个实例。如果使用单例的代码通过接口进行,那么可以模拟一个类型来实现该接口,但是你不能模拟单例本身。

至于单身模式是否是反模式,我不相信它。我认为它经常被过度使用并且往往被实施以取代更好的解决方案。不过,我认为这不是对抗模式本身的标志。