Autofac:注册组件时调用初始化方法

时间:2017-07-03 15:58:40

标签: c# autofac

我只是想知道在注册时是否可以在我的服务中调用方法。

hdf5

当我注册这个组件时,是否可以调用InitialiseService以便初始化我的服务?

hdf5_binary

1 个答案:

答案 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());