c# - 用于动态解析程序集的 Unity IoC

标签 c# inversion-of-control unity-container

我们使用统一作为 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/

相关文章:

.net - 通过 web.config 对 WCF 服务的 Unity 依赖注入(inject)

c# - 实现 IAuthenticationFilter、工作单元和依赖注入(inject)

c# - 如何在wpf中隐藏面板后面的项目

c# - 无法以编程方式查找 Win10 启动文件夹 C#

c# - 使用 ASP.NET MVC 4 应用程序实例化 Unity 命名类型注册

spring - 测试 Spring Scope 是否处于事件状态

dependency-injection - 我可以在 CaSTLe Windsor 中为代理类型定义自定义属性吗

c# - 为什么Unity拦截抓不到Exception?

c# - 需要正则表达式来替换仅由字母或数字包围的所有符号

c# - 按长度升序排序 List<List<string>>