Не запускается правильно loc контейнер Autofac

217
17 марта 2019, 05:10

Изучаю контейнеры, а именно Autofac. В моем примере у меня есть данные datatable, есть контейнер и два класса, реализующие один интерфейс, по логике я хочу чтобы они запускались одновременно, я их регистрирую в контейнере но, когда класс один, то метод, который в нем, отрабатывает отлично. Когда класса два и в каждом методы разной реализации, то отрабатывает все равно один, вместе почему то они не работают. Наверное где то какой то общий объект они использую. Подскажите как исправить Код

using System;
using System.Data;
using  Autofac;
namespace loc
{
    public class Program
    {
        private static IContainer Container { get; set; }
        static void Main(string[] args)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));
            // Here we add five DataRows.
            table.Rows.Add(25, "Indocin", "David", DateTime.Now);
            table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
            table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
            table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
            table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
            var builder = new ContainerBuilder();
            builder.RegisterType<CsvOutput>().As<IOutput>();
            builder.RegisterType<Cs2>().As<IOutput>();
            Container = builder.Build();
            WriteDatatoCsv(table);
            WriteDatatoCsv2(table);
            Console.Write("******");
            Console.ReadKey();
        }

       public static void WriteDatatoCsv(DataTable table)
        {
            // Create the scope, resolve your IDateWriter,
            // use it, then dispose of the scope.
            using (var scope = Container.BeginLifetimeScope())
            {
                var writer = scope.Resolve<IOutput>();
                writer.Write(table);
            }
        }
        public static void WriteDatatoCsv2(DataTable table)
        {
            // Create the scope, resolve your IDateWriter,
            // use it, then dispose of the scope.
            using (var scope = Container.BeginLifetimeScope())
            {
                var writer2= scope.Resolve<IOutput>();
                writer2.Write(table);
            }
        }
    }
}

и два класса

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace loc
{
    public interface IOutput
    {
        void Write(DataTable content);
    }

    class CsvOutput : IOutput
    {
        public void Write(DataTable content)
        {
            StringBuilder sb = new StringBuilder();
            IEnumerable<string> columnNames = content.Columns.Cast<DataColumn>().
                Select(column => column.ColumnName);
            sb.AppendLine(string.Join(";", columnNames));
            foreach (DataRow row in content.Rows)
            {
                IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
                sb.AppendLine(string.Join(";", fields));
            }
            File.WriteAllText(@"d:\test544.csv", sb.ToString());
        }
    }
    class Cs2: IOutput
    {
        public void Write(DataTable content)
        {
            var builder = new StringBuilder();
            builder.Append("<html><body><table>");
            foreach (DataRow r in content.Rows)
            {
                builder.Append("<tr>");
                foreach (var o in r.ItemArray)
                {
                    builder.Append("<td>");
                    builder.Append(o.ToString());
                    builder.Append("</td>");
                }
                builder.Append("</tr>");
            }
            builder.Append("</table></body></html>");
            File.WriteAllText(@"d:\out.html", builder.ToString());
        }
    }

}
READ ALSO
Ожидание события c#

Ожидание события c#

Делаю свою консоль на c# и winforms, столкнулся с проблемой : для реализации методов Read и ReadLine надо подождать, пока пользователь введет данные(если...

174
Как обратиться элементу ключа в словаре?

Как обратиться элементу ключа в словаре?

У меня есть словарь, в котором хранятся всевозможные биграммы(a:b,b:c,a:b,a:c)В результативном словаре должны хранится ключ-значения

182
Нужна ваша помощь со скриптом под Unity

Нужна ваша помощь со скриптом под Unity

На форуме Unity нашёл решение для ранее появившейся у меня проблемы, связанной с пересечение двух ScrollRect'ов(горизонтально и вертикально)Однако,...

139
Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Пытаюсь в Unity3D с помощью компонента VideoPlayer отобразить видео по URL (с IP-камеры)При подключении требуется указать логин и пароль

317