【发布时间】:2014-10-10 10:19:54
【问题描述】:
在我的应用程序中,我在通用实现类SimpleMessenger<T> 中使用了信使接口IMessagePublisher<T>。对于同一类型的T,必须有一个且只有一个SimpleMessenger 实例,必须是ContainerControlledLifetimeManaged,没有可能的例外。
我使用 RegisterTypes 自动完成大部分注册:
unityContainer.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
WithMappings.FromAllInterfacesInSameAssembly,
WithName.Default,
WithLifetime.None,
null,
true
);
令我大吃一惊的是,容器似乎设法自动注册了我所有的 SimpleMessenger!虽然出乎意料,但这可能是一个好消息。也就是说,如果我按照惯例将所有 IMessagePublisher 实现的生命周期设置为 ContainerControlledLifetimeManagement。
简而言之,我想在我的容器中添加一个“注册策略”,类似于
if(somehowObtainedTypeToRegister.GetGenericTypeDefinition() == typeof(IMessageListener<object>).GetGenericTypeDefinition())
{
//Set one way or another the ContainerControlledLifetimeManagement for this type
}
但我不知道该怎么做。我已经使用了UnityContainerExtension,但它似乎只在解决时有用,而不是在注册时有用。有什么方法可以实现吗?
【问题讨论】:
标签: c# unity-container ioc-container