*** Оригинальный ответ (Обновление ниже)
Если вы хотите сделать это, вам нужно выполнить следующие 2 шага:
- Вам необходимо загрузить контроллерыиз внешних библиотек
Уже существует решение для этого в stackoverflow: Как использовать контроллер в другой сборке в ASP.NET Core MVC 2.0?
Он говорит следующее:
Внутри ConfigureServices
метода класса Startup
вы должны вызвать следующее:
services.AddMvc().AddApplicationPart(assembly).AddControllersAsServices();
Вам нужно загрузить скомпилированные представления Razor, я думаю, это то, что у вас есть в ваших HR.Views.dll и ACC.Views.dll.
Существует также решение дляэто для stackoverflow:
Как использовать CompiledRazorAssemblyPart для загрузки Razor Views?
Загрузка библиотек классов Razor в виде плагинов
Это одно из возможных решений по ссылкам выше:
Что вам нужно сделать, это:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.ConfigureApplicationPartManager(ConfigureApplicationParts);
и сконфигурировать детали следующим образом:
private void ConfigureApplicationParts(ApplicationPartManager apm)
{
var rootPath = HostingEnvironment.ContentRootPath;
var pluginsPath = Path.Combine(rootPath, "Plugins");
var assemblyFiles = Directory.GetFiles(pluginsPath, "*.dll", SearchOption.AllDirectories);
foreach (var assemblyFile in assemblyFiles)
{
try
{
var assembly = Assembly.LoadFile(assemblyFile);
if (assemblyFile.EndsWith(".Views.dll"))
apm.ApplicationParts.Add(new CompiledRazorAssemblyPart(assembly));
else
apm.ApplicationParts.Add(new AssemblyPart(assembly));
}
catch (Exception e) { }
}
}
Если у вас также есть файлы javascript и css в наших отдельных проектах MVC, вам нужно будет вставить это в dll, иначе ваше основное приложение не увидит его.Таким образом, в вашем проекте HR и ACC вам нужно добавить это в ваш файл .csproj:
<ItemGroup>
<EmbeddedResource Include="wwwroot\**" />
</ItemGroup>
И просто для ясности, я согласен с другими комментариями, я не думаю, что этохорошая архитектура, но это возможно сделать, если вы хотите.
*** Обновлено (работало)
Всего один шаг:
Редактировать Startup.cs в ConfigureServices метод
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).ConfigureApplicationPartManager(ConfigureApplicationParts);
и метод:
private void ConfigureApplicationParts(ApplicationPartManager apm)
{
var rootPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var assemblyFiles = Directory.GetFiles(rootPath , "*.dll");
foreach (var assemblyFile in assemblyFiles)
{
try
{
var assembly = Assembly.LoadFile(assemblyFile);
if (assemblyFile.EndsWith(this.GetType().Namespace + ".Views.dll") || assemblyFile.EndsWith(this.GetType().Namespace + ".dll"))
continue;
else if (assemblyFile.EndsWith(".Views.dll"))
apm.ApplicationParts.Add(new CompiledRazorAssemblyPart(assembly));
else
apm.ApplicationParts.Add(new AssemblyPart(assembly));
}
catch (Exception e) { }
}
}