【问题标题】:c# Unity Container Namec# Unity 容器名称
【发布时间】:2016-06-18 10:00:44
【问题描述】:

我想使用代码获取统一容器(使用加载配置创建)名称。

命名容器是使用配置文件加载的,我需要查看容器的名称。

有可能吗?

谢谢!!!

【问题讨论】:

  • 我不确定这一点,但只是解决了这个问题。在将类注册到容器中时,您可以将容器名称注入到类属性中,以便在解析类时可以访问实际包含容器名称的类的属性。

标签: c# unity-container


【解决方案1】:

您可以使用以下代码获取容器的名称(如果您在配置文件中命名它

#region StaticVariables
public static IUnityContainer unityContainer { get; set; }
#endregion

#region StaticMethod
static void Main(string[] args)
{
    var program = new Program();
    unityContainer = new UnityContainer().LoadConfiguration();

    foreach (var unityContainerRegistration in unityContainer.Registrations)
        Console.WriteLine($"{unityContainerRegistration.Name } | { unityContainerRegistration.RegisteredType} | { unityContainerRegistration.MappedToType} | { unityContainerRegistration.LifetimeManager.InUse }");
}
#endregion

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
  </configSections>

  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="IOperation" type="Unity.IOperation, Unity" />
    <alias alias="ILogger" type="Unity.ILogger, Unity" />
    <alias alias="ConsoleLogger" type="Unity.ConsoleLogger, Unity" />
    <alias alias="FileLogger" type="Unity.FileLogger, Unity" />
    <alias alias="AddOperation" type="Unity.AddOperation, Unity" />
    <alias alias="SubtractOperation" type="Unity.SubtractOperation, Unity" />
    <alias alias="MultiplyOperation" type="Unity.MultiplyOperation, Unity" />
    <alias alias="DivideOperation" type="Unity.DivideOperation, Unity" />
    <alias alias="QuotientOperation" type="Unity.QuotientOperation, Unity" />
    <alias alias="LoggingCallHandler" type="Logger.CallHandler.LoggingCallHandler, Unity" />
    <alias alias="LoggingInterceptionBehavior" type="Logger.InstanceInterception.LoggingInterceptionBehavior, Unity" />

    <namespace name="Unity" />
    <assembly name="Unity" />
    <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>

    <container>
      <extension type="Interception"/>

      <!--<register type="LoggingCallHandler" />-->
      <register type="ILogger" mapTo="ConsoleLogger" />
      <register name="ApplicationLogger" type="ILogger" mapTo="ConsoleLogger" />
      <register name="+" type="IOperation" mapTo="AddOperation">
        <interceptor type="InterfaceInterceptor"/>
        <interceptionBehavior type="LoggingInterceptionBehavior"/>
      </register>
      <register name="-" type="IOperation" mapTo="SubtractOperation">
        <interceptor type="InterfaceInterceptor"/>
        <interceptionBehavior type="LoggingInterceptionBehavior"/>
      </register>
      <register name="*" type="IOperation" mapTo="MultiplyOperation" />
      <register name="/" type="IOperation" mapTo="DivideOperation" />
      <register name="%" type="IOperation" mapTo="QuotientOperation" />

      <register name="plus" type="IOperation" mapTo="AddOperation">
        <interceptor type="InterfaceInterceptor"/>
        <interceptionBehavior type="LoggingInterceptionBehavior"/>
      </register>
      <register name="minus" type="IOperation" mapTo="SubtractOperation">
        <interceptor type="InterfaceInterceptor"/>
        <interceptionBehavior type="LoggingInterceptionBehavior"/>
      </register>
      <register name="multiply" type="IOperation" mapTo="MultiplyOperation" />
      <register name="divide" type="IOperation" mapTo="DivideOperation" />
      <register name="remainder" type="IOperation" mapTo="QuotientOperation" />
    </container>
  </unity>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多