如果我使用VS2015.1创建新的示例项目(WebForms或MVC),则会创建两个用于配置OWIN的文件:
\ Startup.cs(或.vb)
using Microsoft.Owin;
using Owin;
[assembly: OwinStartupAttribute(typeof(WebApplication6.Startup))]
namespace WebApplication6
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
\ App_Start \ Config.Auth.cs(或.vb)
namespace WebApplication6
{
public partial class Startup {
public void ConfigureAuth(IAppBuilder app)
{
// removed for brevity
}
}
}
我看到这两个类都被声明为partial
,但在许多关于如何使用OWIN的例子中,类不是partial
(参见here,here,here和here)。
任何人都可以解释是否有正确或最好的方法,以及它是否与使用partial
的应用程序有什么区别?
我想我找到了一个答案here,但仍然会欣赏其他人在OWIN背景下可以添加的内容:
https://stackoverflow.com/a/3601918/792888
部分类的最大用途是使代码生成器/设计者的生活更轻松。部分类允许生成器简单地发出他们需要发出的代码,而不必处理用户对文件的编辑。用户同样可以通过使用第二个分类来自由地使用新成员来注释该类。这为分离关注点提供了一个非常干净的框架。
所以部分类只是编译成一个类。部分声明允许具有相同名称的其他类共存(然后将它们全部编译到一个类中)。
当且仅当代码生成器在每次构建发生时生成文件时,接受的答案才是真实的。使用OWIN的示例不符合条件,因为在进行框架/脚手架选择时,这两个文件仅生成一次。
因此,我可以看到启动生成为部分类的唯一原因是框架开发人员不希望将owin授权的生成(交叉关注)与启动脚手架的生成相结合;然而,他们只是成功地从基础startup.cs脚手架中删除了杂乱,并且无法解耦它,因为他们不得不将OwinStartupAttribute引入基本启动并调用新的分部类ConfigureAuth中引入的方法。这实际上是如何不使用分部类的完美示例。部分类定义应该解耦,否则使用部分类获得的好处会被它创建的间接性所抵消。必须修改基本部分类定义以添加另一个部分类来添加OWIN授权,这使我很清楚这是一个有缺陷的方法。