为什么OWIN启动类被声明为部分,但有时不是?

问题描述 投票:1回答:2

如果我使用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(参见herehereherehere)。

任何人都可以解释是否有正确或最好的方法,以及它是否与使用partial的应用程序有什么区别?

asp.net asp.net-mvc vb.net owin katana
2个回答
1
投票

我想我找到了一个答案here,但仍然会欣赏其他人在OWIN背景下可以添加的内容:

https://stackoverflow.com/a/3601918/792888

部分类的最大用途是使代码生成器/设计者的生活更轻松。部分类允许生成器简单地发出他们需要发出的代码,而不必处理用户对文件的编辑。用户同样可以通过使用第二个分类来自由地使用新成员来注释该类。这为分离关注点提供了一个非常干净的框架。

所以部分类只是编译成一个类。部分声明允许具有相同名称的其他类共存(然后将它们全部编译到一个类中)。


1
投票

当且仅当代码生成器在每次构建发生时生成文件时,接受的答案才是真实的。使用OWIN的示例不符合条件,因为在进行框架/脚手架选择时,这两个文件仅生成一次。

因此,我可以看到启动生成为部分类的唯一原因是框架开发人员不希望将owin授权的生成(交叉关注)与启动脚手架的生成相结合;然而,他们只是成功地从基础startup.cs脚手架中删除了杂乱,并且无法解耦它,因为他们不得不将OwinStartupAttribute引入基本启动并调用新的分部类ConfigureAuth中引入的方法。这实际上是如何不使用分部类的完美示例。部分类定义应该解耦,否则使用部分类获得的好处会被它创建的间接性所抵消。必须修改基本部分类定义以添加另一个部分类来添加OWIN授权,这使我很清楚这是一个有缺陷的方法。

© www.soinside.com 2019 - 2024. All rights reserved.