>我在将绑定从 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
类的构造函数进行静态检查,但如果有很多参数,维护起来可能会很痛苦。
我建议阅读这条推文链接的文章。它讨论了使用基元作为构造函数参数如何使我们的生活更加艰难以及如何解决它。