我是一名 .NET 开发人员,目前正在尝试学习 ASP.NET 样板。我遇到了PlugIn Modules我知道它可以用于模块依赖性,但我试图理解它们有这些行:
The AbpBootstrapper class defines the PlugInSources property which can be used to add sources to dynamically load plugin modules. A plugin source can be any class implementing the IPlugInSource interface. The PlugInFolderSource class implements it to get the plugin modules from assemblies located in a folder.
所以在尝试实现 IPlugInSource
接口(interface)之后:
using Abp.Modules;
using Abp.PlugIns;
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
public class EmpDetails : IPlugInSource
{
public string EmpName { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public List<Assembly> GetAssemblies()
{
throw new NotImplementedException();
}
public List<Type> GetModules()
{
throw new NotImplementedException();
}
}
我的疑问是:我必须在 GetAssemblies()
和 GetModules()
方法中执行什么操作,如 Assemblies
和Type
我必须返回吗?我已经引用了官方网站文档,但我找不到他们是否正确提供了示例。提前致谢。
最佳答案
您不需要实现 IPlugInSource
。
该文档提供了如何在Startup 类中添加插件源的清晰示例:
services.AddAbp<MyStartupModule>(options =>
{
options.PlugInSources.AddFolder(@"C:\MyPlugIns");
});
要消除您的疑问,请参阅 FolderPlugInSource
中的 GetAssemblies
和 GetModules
方法:
public class FolderPlugInSource : IPlugInSource
{
public string Folder { get; }
public SearchOption SearchOption { get; set; }
private readonly Lazy<List<Assembly>> _assemblies;
public FolderPlugInSource(string folder, SearchOption searchOption = SearchOption.TopDirectoryOnly)
{
Folder = folder;
SearchOption = searchOption;
_assemblies = new Lazy<List<Assembly>>(LoadAssemblies, true);
}
public List<Assembly> GetAssemblies()
{
return _assemblies.Value;
}
public List<Type> GetModules()
{
var modules = new List<Type>();
foreach (var assembly in GetAssemblies())
{
try
{
foreach (var type in assembly.GetTypes())
{
if (AbpModule.IsAbpModule(type))
{
modules.AddIfNotContains(type);
}
}
}
catch (Exception ex)
{
throw new AbpInitializationException("Could not get module types from assembly: " + assembly.FullName, ex);
}
}
return modules;
}
private List<Assembly> LoadAssemblies()
{
return AssemblyHelper.GetAllAssembliesInFolder(Folder, SearchOption);
}
}
关于c# - ASP.NET 样板插件模块或动态模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49647249/