c# 将 ninject 特定绑定转换为 autofac

c# convert ninject specific bindings to autofac

我在将绑定从 ninject 转换为 autofac 时遇到两个问题。

第一个是:

Bind<IMapper>().ToConstant(new Container().Mapper);

第二个是:

Bind<Context>().ToSelf()
               .WithConstructorArgument(CONNECTION_STRING, 
               c => c.Kernel.Get<IUserDatabase>().ConnectionString)

你能帮我一下吗?

谢谢

第一个:

builder
    .RegisterInstance(new Container().Mapper)
    .As<IMapper>();

第二个:

// First option, with a parameter
builder
    .RegisterType<Context>()
    .AsSelf()
    .WithParameter(
        (parameter, context) => parameter.Name == CONNECTION_STRING,
        (parameter, context) => context.Resolve<IUserDatabase>().ConnectionString));

// Second option, with a lambda
builder
    .Register(x => new Context(x.Resolve<IUserDatabase>().ConnectionString))
    .AsSelf();

我更喜欢第二个选项,因为您可以对 Context class 的构造函数进行静态检查,但是如果您有很多参数,维护起来会很痛苦。

我建议阅读链接自 this tweet 的文章。它讨论了使用原语作为构造函数参数如何让我们的生活更加艰难以及如何解决它。