gpt4 book ai didi

c# - 这个插件框架是 IoC/DI 吗?

转载 作者:行者123 更新时间:2023-11-30 22:35:05 28 4
gpt4 key购买 nike

我正在为我的 ASP.NET C# 应用程序开发一种方法,以便在安装新插件时无需重新编译主机应用程序即可允许插件。

这是我的插件加载器类(基于在线找到的教程。)

public class PluginLoader
{
public static IList<IPlugin> Load(string folder)
{
IList<IPlugin> plugins = new List<IPlugin>();

// Get files in folder
string[] files = Directory.GetFiles(folder, "*.plug.dll");
foreach(string file in files)
{
Assembly assembly = Assembly.LoadFile(file);
var types = assembly.GetExportedTypes();
foreach (Type type in types)
{
if (type.GetInterfaces().Contains(typeof(IPlugin)))
{
object instance = Activator.CreateInstance(type);
plugins.Add(instance as IPlugin);
}
}
}
return plugins;
}
}

这个概念是在新插件可以使用的主机应用程序中创建一个 IPlugin 接口(interface)。然后加载程序搜索可用的 DLL 并找到属于 IPlugin 类型的类。然后将它们实例化,我的主机应用程序可以按其认为合适的方式使用它们。

例如它可以这样做:

protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
string folder = Server.MapPath("~/bin/");
path.Text = folder;

var plugins = PluginLoader.Load(folder);
if (plugins.Count == 0)
sb.Append("No plugins found");
else
{
sb.Append("<ul>");
foreach (var plug in plugins)
{

sb.AppendFormat("<li>Default: {0}</li>", plug.Label);
plug.SetLabel("Overwrote default label.");
sb.AppendFormat("<li>New: {0}</li>", plug.Label);
}
sb.Append("</ul>");
}

message.Text = sb.ToString();
}

这个结构是 IoC 还是 DI?该插件引用主机,而不是相反。这似乎与控制反转概念一致。此代码与 IoC/DI 之间是否存在根本区别?

最佳答案

这看起来像是一个利用控制反转但不使用依赖注入(inject)的插件架构。它似乎与 MEF 的工作方式相似。

关于c# - 这个插件框架是 IoC/DI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556921/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com