Unity container 什么对应于统一';注册名称';在unity配置部分?

Unity container 什么对应于统一';注册名称';在unity配置部分?,unity-container,Unity Container,在使用代码在Unity容器中注册和解析类型时,可以使用“注册名称”来消除派生自接口或基类层次结构的引用的歧义 “注册名称”文本将作为参数提供给注册和解析方法: myContainer.RegisterType<IMyService, CustomerService>("Customers"); myContainer.RegisterType(“客户”); 及 MyServiceBase结果=myContainer.Resolve(“客户”); 但是,当我在配置文件中注册类型时

在使用代码在Unity容器中注册和解析类型时,可以使用“注册名称”来消除派生自接口或基类层次结构的引用的歧义

“注册名称”文本将作为参数提供给注册和解析方法:

myContainer.RegisterType<IMyService, CustomerService>("Customers");
myContainer.RegisterType(“客户”);

MyServiceBase结果=myContainer.Resolve(“客户”);
但是,当我在配置文件中注册类型时,我看不到可以在哪里分配“注册名称”

我注册了一个接口:

<typeAlias alias="IEnlistmentNotification" type="System.Transactions.IEnlistmentNotification, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

然后我碰巧知道有两种类型实现了该接口:

<typeAlias alias="PlaylistManager" type="Sample.Dailies.Grid.Workers.PlaylistManager, Sample.Dailies.Grid.Workers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

<typeAlias alias="FlexAleManager" type="Sample.Dailies.Grid.Workers.FlexAleManager, Sample.Dailies.Grid.Workers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

然后,我提供接口和两种类型之间的映射:

<type type="IEnlistmentNotification" mapTo="FlexAleManager"><lifetime type="singleton"/></type>

<type type="IEnlistmentNotification" mapTo="PlaylistManager"><lifetime type="singleton"/></type>

这似乎与此代码对应:

myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>();
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>();
myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>("Flex");
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>("Play");
myContainer.RegisterType();
myContainer.RegisterType();
但很明显,我需要的是一个与以下代码对应的消除歧义的配置条目:

myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>();
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>();
myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>("Flex");
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>("Play");
myContainer.RegisterType(“Flex”);
myContainer.RegisterType(“播放”);
然后,当我进入我的代码时,我可以这样做:

IEnlistmentNotification flex = myContainer.Resolve<IEnlistmentNotification>("Flex");
IEnlistmentNotification play = myContainer.Resolve<IEnlistmentNotification>("Play");
IEnlistmentNotification flex=myContainer.Resolve(“flex”);
IEnlistmentNotification play=myContainer.Resolve(“play”);
明白我的意思吗

谢谢


Kimball

为了回答我自己的问题,我在Codeplex/Unity home上发现了这个碎片:

<type type="IFoo" mapTo="ServerFoo" name="server" />
<type type="IFoo" mapTo="ClientFoo" name="client">
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,Microsoft.Practices.Unity.Configuration">
      <constructor>
         <param name="server" parameterType="IFoo"> 
            <dependency name="server" />
         </param>
      </constructor>
     </typeConfig></type>

请注意,type元素还有一个我不知道的字段:“name”。这提供了我要查找的“注册名称”值

此外,param元素还有一个名为dependency的子元素,该子元素具有执行相同功能的name属性

所以。。。感谢codeplex


Kimball

为了回答我自己的问题,我在Codeplex/Unity home上发现了这个碎片:

<type type="IFoo" mapTo="ServerFoo" name="server" />
<type type="IFoo" mapTo="ClientFoo" name="client">
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,Microsoft.Practices.Unity.Configuration">
      <constructor>
         <param name="server" parameterType="IFoo"> 
            <dependency name="server" />
         </param>
      </constructor>
     </typeConfig></type>

请注意,type元素还有一个我不知道的字段:“name”。这提供了我要查找的“注册名称”值

此外,param元素还有一个名为dependency的子元素,该子元素具有执行相同功能的name属性

所以。。。感谢codeplex


Kimball

在配置中使用xsd,以避免将来“遗漏”内容;-):请,先生,任何使用IEnlistmentNotification的样本(包括所有完整的源代码和测试)?感谢配置中的xsd,以避免将来“遗漏”内容;-):请,先生,任何使用IEnlistmentNotification的样本(包括所有完整的源代码和测试)??谢谢