我目前正在将一个Service Fabric DI实现从Unity移植到Autofac,我需要一些建议。
原始实施:
https://github.com/s-innovations/S-Innovations.ServiceFabric.DependencyInjection
Unity实现延迟在ActorFactory中注册两个依赖项,然后在Actor范围内使用DI容器。
我正在考虑使用Autofac执行此操作的最佳方式。
我想我需要创建一个新的ContainerBuilder,并使用命名范围注册两个Actor Scoped依赖项(可能使用ActorId作为范围Id?),以便实例是这个范围的特别是演员实例。
这是我到目前为止所做的:
public static ILifetimeScope WithActor<TActor>(this Container container,
ActorServiceSettings settings = null) where TActor : ActorBase
{
ContainerBuilder builder = new ContainerBuilder();
if (!container.IsRegistered<IActorDeactivationInterception>())
{
builder.RegisterType<OnActorDeactivateInterceptor>()
.As<IActorDeactivationInterception>()
.EnableInterfaceInterceptors();
builder.Update(container);
}
builder.Register(c => ActorProxyTypeFactory.CreateType<TActor>())
.As(typeof(TActor))
.InstancePerLifetimeScope();
builder.Update(container);
ActorRuntime.RegisterActorAsync<TActor>((context, actorType) => {
try
{
return new ActorService(context,
actorTypeInfo: actorType,
actorFactory: (service, id) =>
// container.BeginLifetimeScope()
// .RegisterInstance(service, new ContainerControlledLifetimeManager())
// .RegisterInstance(id, new ContainerControlledLifetimeManager()).Resolve<TActor>(),
{
var actorBuilder = new
ContainerBuilder();
actorBuilder
.RegisterInstance(service)
.InstancePerDependency();
actorBuilder
.RegisterInstance(id)
.InstancePerDependency();
actorBuilder.Update(container);
return container.Resolve<TActor>();
}, settings: settings);
}
catch (Exception ex)
{
throw;
}
}).GetAwaiter().GetResult();
return container;
}
任何想法,评论最受欢迎!任何人都可以通过DI / this方法了解解决Actors及其依赖关系对性能的影响吗?
完整的代码在这里: