私の質問をする前に、私はすでに次の投稿を行っています。
これが私のプロジェクトのフォルダレイアウトです。
現在、コントローラーまたはビューはありません。 _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
プロジェクトに以下の参照を持っています:
UPDATE:エラーメッセージの追加を忘れた場合:
今、
Owin Startup
_クラスを追加および使用する段階的なプロセスは何ですか(_Home/Index
_へのアクセスなど)?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
を参照できません。これを解決する方法は?
少し遅れましたが、OWINスタートアップクラスを別のプロジェクトに配置する方法を見つけました。プロジェクトで行ったことはすべて正しいので、Bootstrapperプロジェクトのプロパティに1つの変更のみを適用する必要があります。 Bootstrapperプロジェクトを右クリックしてプロパティを入力し、[ビルド]タブをクリックして[出力パス]を探します。標準出力パッチbin\debug \が表示されます。つまり、Bootstrapper dllがこのフォルダーに格納されます。これを、Webアプリ全体が存在するbinフォルダーに変更する必要があります。
たとえば、2つのプロジェクトで簡単なソリューションを作成しました。1つは空のWebアプリで、2つ目はOWINスタートアップクラスのライブラリです。 2番目のプロジェクトのプロパティで、出力パスを..\OwinTest.Web\binに変更しました。これにより、ビルド後にすべてのdllが1つのフォルダーに格納されます。これでアプリを実行でき、OWINスタートアップが正常に動作するはずです。
以下は、Bootstrapperプロジェクトのプロパティ設定の画面です。
install-package Microsoft.Owin.Host.SystemWeb
)ここで、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を意味します)、次の手順を実行します。
install-package Microsoft.AspNet.Mvc
)をインストールします。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>
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" });
}