unity select 不同的注塑厂
Unity select a different injection factory
我想为同一个类型注册两个不同的Injection factory,例如可以是下面这两个注册。
container.RegisterType<BaseSearchProvider>(
new HierarchicalLifetimeManager(),
new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"]));
container.RegisterType<BaseSearchProvider>(
new HierarchicalLifetimeManager(),
new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"]));
现在,对于每个类型,我手动注册我的构造。我有不同的服务,但有些服务需要使用第一次注册,而其他服务需要第二次注册?有什么办法可以通过使用像这样的 "Profile" 来执行此操作吗?
container.RegisterType<IMeetingSearchService>("using Setting 1")
我现在唯一能想到的解决方案是继承 BaseSearchProvider 并注册这种类型,这样我就可以注册两种不同的类型并用它来调整我所有的构造函数,所以我什至不需要那个选择器。但也许还有另一种方法?
有一种方法可以按名称解析。
因此您需要两种不同的派生类型的 BaseSearchProvider。让我们称呼他们:
SettingsOneSearchProvider & SettingsTwoSearchProvider
现在我们可以通过在两个新提供程序的构造函数中使用 'ExamineManager.Instance.SearchProviderCollection["settingsname"]' 代码来获得正确的设置。
在您的注册中 class 您可以像这样在注册中添加名称:
container.RegisterType<BaseSearchProvider, SettingsOneSearchProvider>("SettingsOne"
new HierarchicalLifetimeManager(),
new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"]));
container.RegisterType<BaseSearchProvider, SettingsTwoSearchProvider>("SettingsOne"
new HierarchicalLifetimeManager(),
new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"]));
现在我们在注册中需要一个额外的解析方法class来按名称解析:
public static T Resolve<T>(string name)
{
return container.Resolve<T>(name);
}
现在您可以使用以下代码解决两者之一:
var provider = RegistationClassName.Resolve<BaseSearchProvider>("SettingsOne");
我想为同一个类型注册两个不同的Injection factory,例如可以是下面这两个注册。
container.RegisterType<BaseSearchProvider>(
new HierarchicalLifetimeManager(),
new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"]));
container.RegisterType<BaseSearchProvider>(
new HierarchicalLifetimeManager(),
new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"]));
现在,对于每个类型,我手动注册我的构造。我有不同的服务,但有些服务需要使用第一次注册,而其他服务需要第二次注册?有什么办法可以通过使用像这样的 "Profile" 来执行此操作吗?
container.RegisterType<IMeetingSearchService>("using Setting 1")
我现在唯一能想到的解决方案是继承 BaseSearchProvider 并注册这种类型,这样我就可以注册两种不同的类型并用它来调整我所有的构造函数,所以我什至不需要那个选择器。但也许还有另一种方法?
有一种方法可以按名称解析。
因此您需要两种不同的派生类型的 BaseSearchProvider。让我们称呼他们:
SettingsOneSearchProvider & SettingsTwoSearchProvider
现在我们可以通过在两个新提供程序的构造函数中使用 'ExamineManager.Instance.SearchProviderCollection["settingsname"]' 代码来获得正确的设置。
在您的注册中 class 您可以像这样在注册中添加名称:
container.RegisterType<BaseSearchProvider, SettingsOneSearchProvider>("SettingsOne"
new HierarchicalLifetimeManager(),
new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"]));
container.RegisterType<BaseSearchProvider, SettingsTwoSearchProvider>("SettingsOne"
new HierarchicalLifetimeManager(),
new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"]));
现在我们在注册中需要一个额外的解析方法class来按名称解析:
public static T Resolve<T>(string name)
{
return container.Resolve<T>(name);
}
现在您可以使用以下代码解决两者之一:
var provider = RegistationClassName.Resolve<BaseSearchProvider>("SettingsOne");