我正在构建一个WPF应用程序,并使用Autofac作为IoC容器。这种情况有点难以描述,但我将尝试在下面提供相关的代码片段:
我的应用程序启动器包含以下代码,用于注册我的应用程序中的视图模型:
请注意
然后我有以下代码来注册开放泛型的实现者:
为了避免将容器传递到我的事件分派器中,我正在传递一个委托,如下所示:
最后一段代码让我遇到了问题:它会导致实现了
问题是:如何使Autofac解析实现了
谢谢。
我的应用程序启动器包含以下代码,用于注册我的应用程序中的视图模型:
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
接口的ViewModel在每次调用时都会创建新的实例,而我只需要解析一次实例,并且实现这个通用接口的ViewModel在整个应用程序中只创建一个实例。问题是:如何使Autofac解析实现了
INotificationHandler<T>
接口的ViewModel的单个实例,同时保持其他ViewModel被创建为PerDependency
?谢谢。