2011-08-05 59 views
4

具體類我有一個接口,定義如下結構圖:在運行時

public interface IShape 
{ 

} 

public class Square : IShape 
{ 

} 

一類我知道我可以依賴注入的構造圖如下配置此。

ObjectFactory.Initialize(x => 
{ 
    x.For<IShape>().Use<Square>().Named("Square"); 

} 
); 

不過,我想知道我怎麼能配置結構圖,如果我可以只知道在運行時的具體類型。例如,我想做如下:

ObjectFactory.Initialize(x => 
{ 
    x.For<IShape>().Use<Typeof(Square)>().Named("Square"); 

} 
); 

編輯:一個新的形狀對象(即圓形)將被插入使用額外的DLL。因此,設計也應該能夠處理這種情況。

任何意見將不勝感激。

感謝

回答

1

這對我的作品。

public class ShapeHolder 
{ 
    public IShape shape{ get; set ;} 
    public string shapeName { get; set; } 
} 

//Run time shape creation 
ShapeHolder shapeholder = factory.CreateShape(); 
ObjectFactory.Initialize(x => 
{ 
    x.For(typeof(IShape)).Use(shapeholder.shape).Named(shapeholder.shapeName); 
}); 
0

一些lambda表達式可以幫助你..

// Return a shape based on some runtime criteria 
x.For<IShape>.Use(() => shapeFactory.Create()); 


public class ShapeFactory 
{ 
    public IShape Create() 
    { 
     // Return a shape based some criteria 
     return new Square(); 
    } 
}