问题
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 Module, 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.
回答1:
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));
}
来源:https://stackoverflow.com/questions/7777247/using-autofac-to-provide-types-exported-by-static-factory