문제

I'm adding autofac to an existing project and some of the service implementations require their Initialize method to be called and passed configuration information. Currently I'm using the code:

builder.Register(context =>
                 {
                    var service = 
                         new SqlTaxRateProvider(context.Resolve<IUserProvider>());
                    service.Initialize(config);
                    return service;
                 }
).As<ITaxService>()
.SingleInstance();

which works but I'm still creating the object myself which is what I'm trying to get away from this and allow autofac to handle it for me. Is it possible to configure a post create operation that would carry out the custom initialisation?

To give you an idea of what I'm after ideally this would be the code:

builder.RegisterType<SqlTaxRateProvider>()
 .As<ITaxService>()
 .OnCreated(service=> service.Initialize(config))
 .SingleInstance();

Update: I am using Autofac-2.1.10.754-NET35

도움이 되었습니까?

해결책

.OnActivating(e => e.Instance.Initialize(...))

should do the trick.

You might also investigate the Startable module (see the Startable entry in the Autofac wiki).

Mark's suggestion to do initialisation in the constructor is also a good one. In that case use

.WithParameter(new NamedParameter("config", config))

to merge the config parameter in with the other constructor dependencies.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top