在反射(reflection)了我收到的所有精彩答案后,我的 previous question about modeling my code to maximize code re-use ,我开始想知道是否可以在运行时而不是在编码时将接口(interface)分配给对象。
以 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())
如果不是对接口(interface)参数进行硬编码,而是在运行时分配它怎么办?这样,我可以为实现
IVendorMessenger
的类编译一个 dll。 ,将其放入与 OutboxManagerExecutable
相同的文件夹中存在,它将在运行时连接所有内容。我想,使用这个逻辑,我可以找到一种方法来删除 IVendorMessenger
的多个实现。在同一个文件夹中,并将可执行文件设计为足够智能,以遍历所有适当的 dll 并相应地使用它们。这种类型的功能在 .NET 4 中是否可行?
最佳答案
查看 Managed Extensibility Framework (MEF) .正如您所描述的那样,它可以自动组合您的应用程序的依赖项。它随 .NET 4.0 一起提供。
关于.net - 是否可以在运行时将接口(interface)分配给对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3396359/