簡體   English   中英

Autofac寄存器類別

[英]Autofac register class

我有一個依賴於記錄器的類。 如何注冊以確保記錄儀通過?

public class Files : IHttpHandler
{

    public Files(ILogger logger)
    {
        Logger = logger;
        fileService = new FileService(logger);
    }    
}

如果您沒有其他陷阱,這沒什么大不了的。 請考慮以下示例:

[Test]
public void PassLoggerToHandlersCtor()
{
    // Arrange
    var builder = new ContainerBuilder();
    builder.RegisterType<Logger>().As<ILogger>();
    builder.RegisterType<Files>().As<IHttpHandler>();
    builder.RegisterType<FileService>().AsSelf();
    var container = builder.Build();

    // Act
    var handler = container.Resolve<IHttpHandler>();

    // Assert
    Assert.IsInstanceOf<Files>(handler);
    var files = (Files) handler;
    Assert.IsInstanceOf<Logger>(files.Logger);
    Assert.IsInstanceOf<Logger>(files.fileService.Logger);

}

public class Files : IHttpHandler
{
    /// <summary>
    /// Just for tests
    /// </summary>
    public ILogger Logger { get; }

    /// <summary>
    /// Just for tests
    /// </summary>
    public FileService fileService { get; }


    /// <inheritdoc />
    public bool IsReusable { get; }

    public Files(ILogger logger)
    {
        Logger = logger;
        fileService = new FileService(logger);
    }

    /// <inheritdoc />
    public void ProcessRequest(HttpContext context)
    {

    }
}

public interface ILogger { }

public class Logger : ILogger { }

public class FileService
{
    /// <summary>
    /// Just for tests
    /// </summary>
    public ILogger Logger { get; }

    public FileService(Program.ILogger logger)
    {
        Logger = logger;
    }
}

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM