bha*_*lad 3 c# inversion-of-control unity-container
我们使用统一作为IoC.我们遇到了独特的问题.我们创建了名为IPlugin的接口.该接口在各种第三方供应商之间共享,以基于此接口开发自己的插件.然后这些插件适合我们的系统.供应商将提供他们的插件作为DLL.我们想要的是,使用unity我们想要解析用IPlugin接口实现的所有程序集类型.我发现这可以通过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
*/
}
Run Code Online (Sandbox Code Playgroud)
供应商的集会
Public class AbcCompanyPlugIn : IPlugin
{
Void ProcessData()
{
// some code
}
}
Public class XyzCompanyPlugIn : IPlugin
{
Void ProcessData()
{
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
您可以编写一些Reflection代码来扫描文件夹中的加载项程序集,并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);
Run Code Online (Sandbox Code Playgroud)
(代码可能无法编译)
| 归档时间: |
|
| 查看次数: |
5972 次 |
| 最近记录: |