I have a dependency which provides a number of services using its static ServiceManager. It also provides a list of available types.
Type[] ServiceManager.GetServiceTypes();
object GetService(Type t);
In an Autofac Mod开发者_运维知识库ule, I'd like to enumerate these types and register 'dynamic instantiation' of them. It's important that I call ServiceManager.GetService each time an instance is requested.
I ended up using my own RegistrationBuilder, looks pretty funky but it works. Have I missed an obvious trick?
foreach (var type in ServiceManager.GetServiceTypes())
{
var rb = RegistrationBuilder.ForDelegate(
type,
(ctx, parms) => ServiceManager.GetService(type))
.ExternallyOwned();
builder.RegisterCallback(
cr => RegistrationBuilder.RegisterSingleComponent(cr, rb));
}
精彩评论