web-dev-qa-db-ja.com

OwinStartupクラスのConfigurationメソッドはいつどのように呼び出されますか?

私の質問をする前に、私はすでに次の投稿を行っています。

  1. OWINスタートアップクラスを取得できませんIIS ASP.NETプロジェクトファイルの名前を変更した後、Express および質問で言及されているすべての投稿。
  2. OWINスタートアップ検出
  3. サーバーエラー#884を修正するにはweb.configでOwinStartupAttributeが必要
  4. OWINスタートアップクラスが検出されない

これが私のプロジェクトのフォルダレイアウトです。

enter image description here
現在、コントローラーまたはビューはありません。 _Owin Startup_ファイルのみ。


Startup.cs

_using System;
using Microsoft.Owin;
using Owin;

[Assembly: OwinStartup(typeof(Bootstrapper.Startup))]

namespace Bootstrapper
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync(GetTime() + " My First OWIN App");
            });
        }

        string GetTime()
        {
            return DateTime.Now.Millisecond.ToString();
        }
    }
}
_


Web.config

_<appSettings>
    <add key="owin:AutomaticAppStartup" value="true" />
    <add key="owin:appStartup" value="Bootstrapper.Startup" />
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
_


私はBootstrapperプロジェクトに以下の参照を持っています:

  1. Microsoft.Owin
  2. Microsoft.Owin.Host.SystemWeb
  3. オーウィン
  4. システム
  5. System.Core


UPDATE:エラーメッセージの追加を忘れた場合:

enter image description here


今、

  1. [〜#〜] why [〜#〜]動作していませんか?
  2. 非常に基本的なプロジェクトで_Owin Startup_クラスを追加および使用する段階的なプロセスは何ですか(_Home/Index_へのアクセスなど)?
  3. _Owin Startup_クラスのConfigurationメソッドはいつ、どのように呼び出されますか?


UPDATE:2016年12月10日

_Project-Folder-Layout_を確認してください。 Bootstrapperプロジェクトには、次のファイルがあります。
IocConfig.cs

_[Assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]

namespace Bootstrapper
{
    public class IocConfig
    {
        public static void RegisterDependencies()
        {
            var builder = new ContainerBuilder();

            builder.RegisterControllers(typeof(MvcApplication).Assembly);
            builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
            builder.RegisterModule<AutofacWebTypesModule>();

            builder.RegisterType(typeof(MovieService)).As(typeof(IMovieService)).InstancePerRequest();
            builder.RegisterType(typeof(MovieRepository)).As(typeof(IMovieRepository)).InstancePerRequest();

            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }
}
_

次に、_OWIN Startup_クラスでIocConfig.RegisterDependencies()を実行します。上部のStartupで_using Bootstrapper_を実行していますが、機能していません。つまり、IocConfig内のStartupを参照できません。これを解決する方法は?

10
Vedant

少し遅れましたが、OWINスタートアップクラスを別のプロジェクトに配置する方法を見つけました。プロジェクトで行ったことはすべて正しいので、Bootstrapperプロジェクトのプロパティに1つの変更のみを適用する必要があります。 Bootstrapperプロジェクトを右クリックしてプロパティを入力し、[ビルド]タブをクリックして[出力パス]を探します。標準出力パッチbin\debug \が表示されます。つまり、Bootstrapper dllがこのフォルダーに格納されます。これを、Webアプリ全体が存在するbinフォルダーに変更する必要があります。

たとえば、2つのプロジェクトで簡単なソリューションを作成しました。1つは空のWebアプリで、2つ目はOWINスタートアップクラスのライブラリです。 2番目のプロジェクトのプロパティで、出力パスを..\OwinTest.Web\binに変更しました。これにより、ビルド後にすべてのdllが1つのフォルダーに格納されます。これでアプリを実行でき、OWINスタートアップが正常に動作するはずです。

以下は、Bootstrapperプロジェクトのプロパティ設定の画面です。

enter image description here

0
Roman Suska
  1. 空のWebアプリケーションプロジェクトを作成する
  2. NuGetを使用してOWINをインストールします(install-package Microsoft.Owin.Host.SystemWeb
  3. 「Startup.cs」というプロジェクトルートに空のクラスを追加します

ここで、3番目の質問に答えます。スタートアップクラスはOWINのエントリポイントであり、自動的に検索されています。公式ドキュメントに記載されているとおり:

命名規則:Katanaは、アセンブリ名またはグローバル名前空間に一致する名前空間でStartupという名前のクラスを探します。

Startupクラスの独自の名前を選択することもできますが、デコレータまたはAppConfigを使用してこれを設定する必要があることに注意してください。ここで述べたように: https://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

これは、基本的なOWINテストを実行するために必要なすべてのものです。

using Owin;
using System;

namespace OwinTest
{
    public class Startup
    {
        public static void Configuration(IAppBuilder app)
        {
            app.Use(async (ctx, next) =>
            {
                await ctx.Response.WriteAsync(DateTime.Now.ToString() + " My First OWIN App");
            });
        }
    }
}

MVCを使用する場合(「ホーム/インデックス」ではMVCを意味します)、次の手順を実行します。

  1. MVC NuGet(install-package Microsoft.AspNet.Mvc)をインストールします。
  2. 「Controllers」フォルダーをプロジェクトに追加します。
  3. 新しい「Controlles」フォルダーの下に新しい空のコントローラーを作成し(右クリック->追加-> MVC 5コントローラー-空)、「HomeController」という名前を付けます。
  4. 新しく作成された「Views/Home」フォルダーの下にビューページを作成します。右クリック->追加->表示。 「Index」という名前を付け、「use layour page」のチェックを外します。

WebViewPageからページを継承させます。すべて次のようになります。

@inherits System.Web.Mvc.WebViewPage
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        <h1>Owin Hello</h1>
    </div>
</body>
</html>
  1. global.asaxを追加して、ルートをセットアップします。プロジェクトを右クリック->追加->新規アイテム->グローバルアプリケーションクラス.

ルート定義をApplication_Startメソッドに追加します。

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapRoute(name: "Default",
        url: "{controller}/{action}",
        defaults: new { controller = "Home", action = "Index" });
}
  1. 上記の「..await ctx.Response.WriteAsync ...」ミドルウェアをコメント化することを忘れないでください。そうしないと、MVCに干渉します。
  2. プロジェクトを実行します。動作するはずです。
6
Ivan Sivak