0

私はまだ Unity を使い始めたばかりで、単純な質問のように思えます。

同じインターフェイスの 2 つの異なるインスタンスに依存するクラスがあります。このクラスを構成して解決するにはどうすればよいですか?

IE 与えられた:

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);
    }
}

ConsoleLogger と AnotherLogger の設定方法を知っています。また、実際のコードでそれらにアクセスする方法も知っています。私が妨げているように見えるのは、CombinedLogger と AnotherLogger のインスタンスを渡しながら、CombinedLogger を構成して使用する方法を理解することです。

4

3 に答える 3

2
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, ConsoleLogger>();
container.RegisterType<ILogger, AnotherLogger>("another");
container.RegisterType<ILogger, CombinedLogger>("combined");
var instances = container.ResolveAll<ILogger>();
于 2009-05-18T19:20:40.153 に答える
1

アレイの構成サポートに関するドキュメントをお読みください。

于 2009-05-18T20:13:50.890 に答える
1

名前付き登録を使用します。

myContainer.RegisterType("ConsoleLogger"); myContainer.RegisterType("AnotherLogger"); myContainer.RegisterType("CombinedLogger");

次に、タイプを解決するときに、名前を使用して特定のものを取得しました

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);    
}
}
于 2009-05-18T19:21:56.330 に答える