Autofac with multiple implementations of the same interface

前端 未结 4 1877
小鲜肉
小鲜肉 2021-02-03 21:17

I\'m using Autofac and would like to have multiple implementations of an interface. How can I configure Autofac so to resolve dependencies based on the current type?

Mor

4条回答
  •  感情败类
    2021-02-03 21:44

    4 options here: https://autofaccn.readthedocs.io/en/latest/faq/select-by-context.html

    Option 1: Redesign Your Interfaces

    ILoggingMessageHandler , IDoSomethingMessageHandler 
    

    Option 2: Change the Registrations

    builder.Register(ctx => new FinalHandler(ctx.Resolve()));
    or
    builder.Register(ctx => new FinalHandler(ctx.Resolve()));
    

    Option 3: Use Keyed Services

    builder.RegisterType()
               .WithParameter(
                 new ResolvedParameter(
                   (pi, ctx) => pi.ParameterType == typeof(IMessageHandler),
                   (pi, ctx) => ctx.ResolveKeyed("something")));
    

    Option 4: Use Metadata

    public class FinalHandler
    {
      public FinalHandler([WithMetadata("sendBy", "something")] IMessageHandler messageHandler) { ... }
    }
    

提交回复
热议问题