Я пытаюсь реализовать пошаговое самооходовое приложение OWIN после this article. Я сделал все примеры до раздела «Использовать конфигурационные объекты для настройки промежуточного ПО», но во время кодирования примера из этого раздела я получил ошибку. Вот мой код:Класс «WebAPI.MyMiddlewareComponent» не имеет конструктора, принимающего 2 аргумента
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
// Add the Owin Usings:
using Owin;
using Microsoft.Owin.Hosting;
using Microsoft.Owin;
namespace WebAPI
{
// use an alias for the OWIN AppFunc:
using AppFunc = Func<IDictionary<string, object>, Task>;
class Program
{
static void Main(string[] args)
{
WebApp.Start<Startup>("http://localhost:8080");
Console.WriteLine("Server Started; Press enter to Quit");
Console.ReadLine();
}
}
public class MyMiddlewareConfigOptions
{
string _greetingTextFormat = "{0} from {1}{2}";
public MyMiddlewareConfigOptions(string greeting, string greeter)
{
GreetingText = greeting;
Greeter = greeter;
Date = DateTime.Now;
}
public string GreetingText { get; set; }
public string Greeter { get; set; }
public DateTime Date { get; set; }
public bool IncludeDate { get; set; }
public string GetGreeting()
{
string DateText = "";
if (IncludeDate)
{
DateText = string.Format(" on {0}", Date.ToShortDateString());
}
return string.Format(_greetingTextFormat, GreetingText, Greeter, DateText);
}
}
public static class AppBuilderExtensions
{
public static void UseMyMiddleware(this IAppBuilder app, MyMiddlewareConfigOptions configOptions)
{
app.Use<MyMiddlewareComponent>(configOptions);
}
public static void UseMyOtherMiddleware(this IAppBuilder app)
{
app.Use<MyOtherMiddlewareComponent>();
}
}
public class MyMiddlewareComponent
{
AppFunc _next;
// Add a member to hold the greeting:
string _greeting;
public MyMiddlewareComponent(AppFunc next, string greeting)
{
_next = next;
_greeting = greeting;
}
public async Task Invoke(IDictionary<string, object> environment)
{
IOwinContext context = new OwinContext(environment);
// Insert the _greeting into the display text:
await context.Response.WriteAsync(string.Format("<h1>{0}</h1>", _greeting));
await _next.Invoke(environment);
}
}
public class MyOtherMiddlewareComponent
{
AppFunc _next;
public MyOtherMiddlewareComponent(AppFunc next)
{
_next = next;
}
public async Task Invoke(IDictionary<string, object> environment)
{
IOwinContext context = new OwinContext(environment);
await context.Response.WriteAsync("<h1>Hello from My Second Middleware</h1>");
await _next.Invoke(environment);
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Set up the configuration options:
var options = new MyMiddlewareConfigOptions("Greetings!", "John");
options.IncludeDate = true;
// Pass options along in call to extension method:
//app.UseMyMiddleware(options);
app.Use<MyMiddlewareComponent>(options);
app.UseMyOtherMiddleware();
}
}
}
Класс 'WebAPI.MyMiddlewareComponent' не имеет конструктор, принимающий 2 аргумента.
когда app.Use<MyMiddlewareComponent>(options);
зов. Если я использовать некоторую строку вместо MyMiddlewareConfigOptions
:
app.Use<MyMiddlewareComponent>("somestring");
это работает. Версия Owin
пакет 3.0.1.0, .NET Framework - 4.5.
Почему это происходит?