我们使用统一作为 IoC。我们遇到了独特的问题。 我们已经创建了名为 IPlugin 的接口(interface)。该接口(interface)在各种第三方供应商之间共享,以基于该接口(interface)开发他们自己的插件。这些插件然后适合我们的系统。 供应商将以 dll 形式提供他们的插件。我们想要的是, 使用 unity 我们想要解析所有通过 IPlugin 接口(interface)实现的程序集类型。我开始知道这可以通过 MEF 导出属性实现,我想知道这是否可以通过 Unity 使用一些简短的扩展来实现。
我们的代码
Public interface IPlugin
{
Void ProcessData();
}
Public class DataProcessor
{
Var pluginList = unityContainer.ResolveAssemblies<IPlugIn>()
/*
There is no such method in unity but what we want is scan all assemblies in bin folder and load all types which are inheriting from IPlugIn
*/
}
供应商组装
Public class AbcCompanyPlugIn : IPlugin
{
Void ProcessData()
{
// some code
}
}
Public class XyzCompanyPlugIn : IPlugin
{
Void ProcessData()
{
// some code
}
}
最佳答案
您可以编写一些反射代码来扫描加载项程序集的文件夹并向容器注册所有 IPlugin
实现。
像这样的东西应该可以工作:
var assemblies = // read all assemblies from disk
var pluginTypes = from a in assemblies
from t in a.GetExportedTypes()
where typeof(IPlugin).IsAssignableFrom(t)
select t;
foreach (var t in pluginTypes)
container.RegisterType(typeof(IPlugin), t);
(代码可能无法编译)
关于c# - 用于动态解析程序集的 Unity IoC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595578/