我遇到的问题是解析使用命名参数注册的服务导致错误的解决方案:
注册就是这样:
builder.RegisterType<CviStaticCacheManager>()
.As<ICacheManager>()
.Named<ICacheManager>(STATIC_CACHE)
.SingleInstance();
builder.RegisterType<CviRequestCacheManager>()
.As<ICacheManager>()
.Named<ICacheManager>(REQUEST_CACHE)
.InstancePerLifetimeScope();
如果我解决了这样注册的服务,那么一切正常:
builder.RegisterType<PermissionService>().As<IPermissionService>()
.WithParameter(ResolvedParameter.ForNamed<ICacheManager>(STATIC_CACHE))
.InstancePerLifetimeScope();
我的问题是我有一些注册,我无法修改解析服务(我不能使用ResolveKeyed / ResolveNamed!):
var cm = AutofacDependencyResolver.Current.RequestLifetimeScope.Resolve<ICacheManager>()
现在我总是得到一个CviStaticCacheManager的实例 - 无论我注册它的顺序都无关紧要。
我试图在一个模块中解决这个问题 - 但后来我总是得到CviRequestCacheManager:
protected override void AttachToComponentRegistration(IComponentRegistry registry, IComponentRegistration registration)
{
registration.Preparing += OnComponentPreparing;
}
private static void OnComponentPreparing(object sender, PreparingEventArgs e)
{
e.Parameters = e.Parameters.Union(
new[]
{
new ResolvedParameter(
(p, i) => p.ParameterType == typeof (ICacheManager),
(p, i) => i.ResolveKeyed<ICacheManager>(REQUEST_CACHE))
});
}
我真的很沮丧,我正在寻找解决方案。也许有人可以帮助我。
最诚挚的问候 约尔格
答案 0 :(得分:0)
评论后
//app.UseAutofacMiddleware(container);
//app.UseAutofacMvc();
它突然起作用了。
我目前不需要owin集成 - 但是如果我启用调用 app.UseAutofacMvc(); ,我真的不知道为什么注册组件的顺序会受到影响
此致 约尔格