我正在构建一个 WPF 应用程序并使用 Autofac 作为 IoC 容器。这个场景有点难以描述,但我会尝试在下面给出相关的代码:
我的应用程序引导程序包含以下代码以在我的应用程序中注册视图模型:
builder.RegisterAssemblyTypes(assemblySource)
.Where(type => type.Name.EndsWith("ViewModel"))
.Where(type => !string.IsNullOrWhiteSpace(type.Namespace) && type.Namespace.Contains("ViewModels"))
.AssignableTo<INotifyPropertyChanged>()
.AsSelf()
.InstancePerDependency();
(请注意InstancePerDependency()我必须进行的调用,因为我显示了许多视图实例)
然后我有以下代码来注册开放泛型的实现者:
builder.RegisterAssemblyTypes(assemblySource)
.AsClosedTypesOf(typeof(INotificationHandler<>))
.AsSelf()
.SingleInstance();
为了避免将容器传递给我的事件调度程序,我将它传递给一个委托,如下所示:
builder.Register<ServiceFactory>(ctx => { return t => Container.Resolve(t ); });
最后一点代码给我带来了一个问题:它导致实现INotificationHandler接口的 ViewModels在每次调用时都创建实例,而我只需要解析一次实例,而实现这个通用接口的 ViewModels 将只有一个实例在整个应用程序中创建。
问题是:如何让 Autofac 解析实现INotificationHandler<T>接口的 ViewModel 的单个实例,同时保持其他 ViewModel 的创建PerDependency?
相关分类