2

IMessageService のように、SimpleInjector を構成して LogMiddleware の Invoke メソッドの依存関係を解決するにはどうすればよいですか?

私が知っているように、Asp.net コアは HttpContext.RequestServices (IServiceProvider) を使用して依存関係を解決します。SimpleInjector コンテナーを HttpContext.RequestServices プロパティに設定しましたが、機能しませんでした。各テナントにはコンテナーが必要なため、ServiceProvider を動的に変更したいと考えています。

public class LogMiddleware
{
    RequestDelegate next;
    private readonly ILogger log;

    public LogMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
    {
        this.next = next;
        this.log = loggerFactory.CreateLogger<LogMiddleware>();
    }

    public async Task Invoke(HttpContext context, IMessageService messageService)
    {
         await context.Response.WriteAsync(
                messageService.Format(context.Request.Host.Value));
    }
}

public interface IMessageService
{
    string Format(string message);
}

public class DefaultMessageService : IMessageService
{
  public string Format(string message)
  {
    return "Path:" + message;
  }
}
4

2 に答える 2

0

あなたのコードには2つの問題があります。

  1. 「DefaultMessageService」はインターフェース「IMessageService」を実装していません。このようにする必要があります。
 public class DefaultMessageService : IMessageService
 {
 public string Format(string message)
{
   return "Path:" + message;
 }
}
  1. Startup.cs の ConfigureService に DefaultMessageService を登録する必要があります。
 public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.AddSingleton<IMessageService>(new DefaultMessageService());
        }
于 2016-08-13T02:26:03.747 に答える