2017-03-27 18 views
0

将绑定从ninject转换为autofac有两个问题。c#将ninject特定的绑定转换为autofac

第一个是:

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

,第二个是:

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

愿你伸出援助之手?

谢谢

回答

2

对于第一种:

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的构造函数静态检查类,但如果您有很多参数,则可能会很痛苦。

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

+1

'.AsSelf()'是可选的,因为它是一个默认行为,如果你没有任何注册接口。 – tdragon

+0

太神奇了。完善。感谢你们。 – rmszc81