2017-08-09 145 views
0

我创建Web应用程序 - Asp.Net MVC.NET Core如何在.NET核心分配剃刀查看另一个应用程序

此应用程序包含一些Razor Views,但我想和大家分享这些观点像例如使用DLL或类似的中间件另一个应用程序。

下面是关于比如有些信息与分配Controllers而是围绕Views没有什么特别的 - https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts

我试着添加控制器是这样的:

var assembly = typeof(Project.HomeController).GetTypeInfo().Assembly; 

services.AddMvc() 
     .AddApplicationPart(assembly); 

这个作品非常好,但我不知道如何添加视图。

我如何分配Razor Views到另一个应用程序?是否将它们导入到MVC middleware中间?

+0

第一个问题是,为什么你要这么做?分配无控制器的视图。如果你还分发控制器,为什么不把控制器和视图放在同一个程序集中?视图对于控制器来说总是很特殊的,所以重复使用视图没有任何价值而没有支持它的控制器。同样以程序集方式分发视图会阻止消费者定制模板(添加或删除某些信息等) – Tseng

+0

我想重复使用与特定图形设计完全相同的应用程序部分。该视图与控制器在同一个Assembly中,但我不知道View如何添加到Startup中的另一个应用程序。你可以把一些示例视图与控制器如何连接到特定的应用程序? – Jenan

+0

@Tseng我已经更新了我的问题,我如何添加控制器,这工作得很好,但我不知道如何添加视图。 :) – Jenan

回答

1

您可以创建一个正常的netstandard1.6库,即在您的控制器,并使用以下嵌入视图的资源投入到该DLL在您的csproj:

<ItemGroup> 
    <EmbeddedResource Include="Views\**\*.cshtml" /> 
    </ItemGroup> 

之后,你就可以注册这些使用RazorViewEngineOptions:

// Add views provided in this assembly.  
services.Configure<RazorViewEngineOptions>(options => 
{ 
    options.FileProviders.Add(
     new EmbeddedFileProvider(typeof(ClassInLibrary).GetTypeInfo().Assembly)); 
}); 

其中“ClassInLibrary”是在你的库中的类,然后你可以得到的装配信息。

+0

我已经尝试了这些步骤,但在这一行:'新EmbeddedFileProvider(typeof运算(ClassInLibrary).GetTypeInfo()大会)); ' - 我得到错误“ClassInLibrary”这只是一个命名空间 - 如果我尝试列出这些命名空间的项目,我只有控制器类,我该如何解决这个问题? – Jenan

+0

@Jenan就像我解释的那样,ClassInLibrary是我制作的一个类型。这可能是您正在创建的库中的任何类,例如,您的控制器之一 – Jack

+0

好的,我现在看到。 :) – Jenan

相关问题