Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using StructureMap;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- var container = new Container(_ =>
- {
- _.For<IWorker1>().Use<Worker1>();
- _.For<IWorker2>().Use<Worker2>();
- _.For<IRunAll>().Use<RunAll>();
- _.For<ILog>().Use<Logger>();
- });
- container.GetInstance<IRunAll>().Run();
- }
- }
- public interface IRunAll
- {
- void Run();
- }
- public class RunAll : IRunAll
- {
- private readonly IWorker1 _worker1;
- private readonly IWorker2 _worker2;
- private readonly IContainer _container;
- public RunAll(IWorker1 worker1, IWorker2 worker2, IContainer container)
- {
- _worker1 = worker1;
- _worker2 = worker2;
- _container = container;
- }
- public void Run()
- {
- using (var nested = _container.GetNestedContainer())
- {
- nested.Configure(_ => { _.For<ILog>().Use<Logger1>(); });
- _worker1.Run();
- }
- using (var nested = _container.GetNestedContainer())
- {
- nested.Configure(_ => { _.For<ILog>().Use<Logger2>(); });
- _worker2.Run();
- }
- }
- }
- public interface IWorker
- {
- void Run();
- }
- public interface IWorker1 : IWorker { }
- public interface IWorker2 : IWorker { }
- public class Worker1 : IWorker1
- {
- private readonly ILog _log;
- public Worker1(ILog log)
- {
- _log = log;
- }
- public void Run()
- {
- _log.Info("worker 1");
- }
- }
- public class Worker2 : IWorker2
- {
- private readonly ILog _log;
- public Worker2(ILog log)
- {
- _log = log;
- }
- public void Run()
- {
- _log.Info("worker 2");
- }
- }
- public interface ILog
- {
- void Info(string message);
- }
- public class Logger : ILog
- {
- public void Info(string message)
- {
- Console.WriteLine(message);
- }
- }
- public class Logger1 : ILog
- {
- public void Info(string message)
- {
- Console.WriteLine($"[1] {message}");
- }
- }
- public class Logger2 : ILog
- {
- public void Info(string message)
- {
- Console.WriteLine($"[2] {message}");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement