經過對收到我的previous question about modeling my code to maximize code re-use的所有重要答案的反思之後,我開始想知道是否可以在運行時將接口分配給對象,而不是編碼時。是否可以在運行時將接口分配給對象?
舉個例子來說,從my previous question的代碼的簡化部分:
public class OutboxManager
{
private IVendorMessenger _VendorMessenger;
//This is the default constructor, forcing the consumer to provide
//the implementation of IVendorMessenger.
public OutboxManager(IVendorMessenger messenger)
{
_VendorMessenger = messenger;
}
public void DistributeOutboxMessages()
{
VendorMessenger.SendMessageToVendor()
_OutboxMgrDataProvider.MarkMessageAsProcessed(om)
}
}
目前,如果有人要消耗這一類,他們必須編寫實現IVendorMessenger
類和初始化的過程中爲其提供參數:
var MyOutboxManger = new OutboxManager(new MyVendorMessenger())
如果不是對接口參數進行硬編碼,而是在運行時分配它,那該怎麼辦呢?這樣,我可以編譯一個實現IVendorMessenger
的類的DLL,將它放到OutboxManagerExecutable
所在的同一個文件夾中,並且它會在運行時將所有內容連接起來。我想,通過使用這個邏輯,我可以找到一種方法在相同的文件夾中放置多個IVendorMessenger
的實現,並將可執行文件設計得足夠聰明,可以遍歷所有適當的dll並相應地使用它們。
.NET 4中可以使用這種類型的功能嗎?
你是說你想利用沒有實現IVendorMessenger類,並在運行時插上就頂一下,接口它說它呢? – 2010-08-03 12:23:44
@Lasse不,我想插入的任何類會假定'IVendorMessenger' – 2010-08-03 12:27:49