【发布时间】:2011-03-24 16:57:19
【问题描述】:
在回想了我收到的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 的类,并在运行时将该接口插入到它上面来表示它实现了吗?
-
@Lasse 不,我想插入的任何类都假定
IVendorMessenger
标签: .net design-patterns oop interface