在我的应用程序中,我在通用实现类SimpleMessenger<T>
中使用了messenger界面IMessagePublisher<T>
。对于相同类型的T
,必须有且仅有一个SimpleMessenger
实例必须是ContainerControlledLifetimeManaged
而没有可能的例外。如何按常规在UnityContainer中设置LifeTimeManagement?
我用RegisterTypes到automaticaly做我的大部分registerations的:
unityContainer.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
WithMappings.FromAllInterfacesInSameAssembly,
WithName.Default,
WithLifetime.None,
null,
true
);
而且我很大的惊喜,看来容器管理自动注册我的所有SimpleMessengers!虽然出乎意料,但这可能是一个好消息。也就是说,如果我设法将传统上的生命周期设置为ContainerControlledLifetimeManagement
来实现我所有的IMessagePublisher实现。
几句话,我想添加到我的容器“Registeration战略”,它会说像
if(somehowObtainedTypeToRegister.GetGenericTypeDefinition() == typeof(IMessageListener<object>).GetGenericTypeDefinition())
{
//Set one way or another the ContainerControlledLifetimeManagement for this type
}
但我不知道如何做到这一点。我已经使用了UnityContainerExtension
,但它似乎只在Reslution时间有用,而不是在注册时间。是否有某种方法可以实现这一目标?
我刚回来回答我的问题,因为我发现了这一点,对我自己的,但是你的LINQ查询的方式比我好(我在做什么我在SimpleMessenger上代替IMessageListener的测试)。另外,+1 000 000学习我的实用工具af any()和你可以使用typeof(Generic <>)(我正在做typeof(通用