我只是想知道在注册时是否可以在我的服务中调用方法。
hdf5
当我注册这个组件时,是否可以调用InitialiseService以便初始化我的服务?
hdf5_binary
答案 0 :(得分:3)
您可以使用OnActivating
伪事件:
builder.RegisterType<DataService>()
.Keyed<IDataService>(FiberModule.Key_DoNotSerialize)
.AsImplementedInterfaces()
.OnActivating(e => e.Instance.InitialiseService())
.SingleInstance();
看起来你正在做一个单身人士,所以你也可以考虑实施IStartable
接口,它将自动由 Autofac
public class DataService : IDataService, IStartable
{
public User GetUserById(int id)
{
// do stuff
}
public void SaveUser(int id, User user)
{
// do stuff
}
public void Start()
{
}
}
或使用AutoActivate
方法让 Autofac 自动创建实例。
builder.RegisterType<DataService>()
.Keyed<IDataService>(FiberModule.Key_DoNotSerialize)
.AsImplementedInterfaces()
.AutoActivate()
.SingleInstance();
或在ContainerBuilder
上使用RegisterBuildCallback
方法在构建容器后执行操作
builder.RegisterType<DataService>()
.Keyed<IDataService>(FiberModule.Key_DoNotSerialize)
.AsImplementedInterfaces()
.SingleInstance();
builder.RegisterBuildCallback(c => c.Resolve<IDataSerialize>().Initialise());