C# 如何配置Unity来创建一个类,该类包含两个相同类型的不同项?

C# 如何配置Unity来创建一个类,该类包含两个相同类型的不同项?,c#,unity-container,C#,Unity Container,我仍在从团结开始,我有一个看似简单的问题 我有一个类,它依赖于同一接口的两个不同实例。如何配置和解析此类 即给定: public interface ILogger { void Write(string message); } public class ConsoleLogger : ILogger { public void Write(string message) { Console.WriteLine(message); } } pub

我仍在从团结开始,我有一个看似简单的问题

我有一个类,它依赖于同一接口的两个不同实例。如何配置和解析此类

即给定:

public interface ILogger
{
    void Write(string message);
}
public class ConsoleLogger : ILogger
{
    public void Write(string message) 
    {
        Console.WriteLine(message);
    }
}
public class AnotherLogger : ILogger
{
    public void Write(string message)
    {
        Console.WriteLine(DateTime.Now.ToString() + " " + message);
    }
}
public class CombinedLogger : ILogger
{
    IList<ILogger> _loggers;
    public CombinedLogger(params ILogger[] loggers)
    {
         _loggers = new List<ILogger>(loggers);
    }
    public void Write(string message)
    {
         foreach(var logger in _loggers) logger.Write(message);
    }
}
公共接口ILogger
{
无效写入(字符串消息);
}
公共类控制台记录器:ILogger
{
公共无效写入(字符串消息)
{
控制台写入线(消息);
}
}
公共类另一个记录器:ILogger
{
公共无效写入(字符串消息)
{
Console.WriteLine(DateTime.Now.ToString()+“”+消息);
}
}
公共类组合记录器:ILogger
{
IList_伐木工人;
公共组合记录器(参数ILogger[]记录器)
{
_记录者=新列表(记录者);
}
公共无效写入(字符串消息)
{
foreach(var logger in_logger)logger.Write(消息);
}
}
我知道如何配置ConsoleLogger和其他记录器。我还知道如何在实际代码中访问它们。我似乎要阻止的是找出如何配置和使用CombinedLogger,传入ConsoleLogger和另一个Logger的实例。

IUnityContainer container=new UnityContainer();
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, ConsoleLogger>();
container.RegisterType<ILogger, AnotherLogger>("another");
container.RegisterType<ILogger, CombinedLogger>("combined");
var instances = container.ResolveAll<ILogger>();
container.RegisterType(); container.RegisterType(“另一个”); 容器。注册表类型(“组合”); var instances=container.ResolveAll();
IUnityContainer container=newunitycontainer();
container.RegisterType();
container.RegisterType(“另一个”);
容器。注册表类型(“组合”);
var instances=container.ResolveAll();

您使用命名注册

myContainer.RegisterType(“控制台记录器”); myContainer.RegisterType(“另一个记录器”); myContainer.RegisterType(“组合记录器”)

然后在解析类型时,使用名称来获取特定的类型

public class CombinedLogger : ILogger{    
IList<ILogger> _loggers;    
public CombinedLogger(params ILogger[] loggers)    
{         
_loggers = new List<ILogger>();    
_loggers.Add(myContainer.Resolve(Of ILogger)("ConsoleLogger")
_loggers.Add(myContainer.Resolve(Of ILogger)("AnotherLogger")
}    
public void Write(string message)    
{         
foreach(var logger in _loggers) logger.Write(message);    
}
}
公共类组合记录器:ILogger{
IList_伐木工人;
公共组合记录器(参数ILogger[]记录器)
{         
_记录器=新列表();
_loggers.Add(myContainer.Resolve(属于ILogger)(“控制台记录器”)
_添加(myContainer.Resolve)(对于ILogger)(“另一个记录器”)
}    
公共无效写入(字符串消息)
{         
foreach(var logger in_logger)logger.Write(消息);
}
}

您使用命名注册

myContainer.RegisterType(“控制台记录器”); myContainer.RegisterType(“另一个记录器”); myContainer.RegisterType(“组合记录器”)

然后在解析类型时,使用名称来获取特定的类型

public class CombinedLogger : ILogger{    
IList<ILogger> _loggers;    
public CombinedLogger(params ILogger[] loggers)    
{         
_loggers = new List<ILogger>();    
_loggers.Add(myContainer.Resolve(Of ILogger)("ConsoleLogger")
_loggers.Add(myContainer.Resolve(Of ILogger)("AnotherLogger")
}    
public void Write(string message)    
{         
foreach(var logger in _loggers) logger.Write(message);    
}
}
公共类组合记录器:ILogger{
IList_伐木工人;
公共组合记录器(参数ILogger[]记录器)
{         
_记录器=新列表();
_loggers.Add(myContainer.Resolve(属于ILogger)(“控制台记录器”)
_添加(myContainer.Resolve)(对于ILogger)(“另一个记录器”)
}    
公共无效写入(字符串消息)
{         
foreach(var logger in_logger)logger.Write(消息);
}
}

阅读上的文档。

阅读上的文档。

好的,我了解CombinedLogger在创建时如何知道要使用哪些其他实例。也就是说,我希望CombinedLogger访问ConsoleLogger和另一个Logger。好的,我了解CombinedLogger在创建时如何知道要使用哪些其他实例。即,我希望CombinedLogger同时访问ConsoleLogger和另一个Logger。