.net - 是否可以在运行时将接口(interface)分配给对象?

标签 .net design-patterns oop interface

在反射(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/

相关文章:

java - 架构与设计模式

Java MVC架构

Javascript 多个原型(prototype)函数 - 如何从另一个调用一个

c++ - 如何在基类构造函数中使用派生类成员

javascript - 调用相同 "class"的另一个方法,但 JavaScript 中的上下文不同?

c# - 如何制作 ReSharper Ultimate 反编译堆栈帧?

c# - 如何使用 WinAPI 读取 MessageBox 文本

.net - 您可以在 Silverlight 中即时编译代码吗?

c# - System.Environment.Version 提供的值不准确

design-patterns - 并行实现树遍历算法的策略?