Аутофак и МаршрутСервис - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь построить инфраструктуру маршрутизации и использую Autofac в качестве контейнера IoC. Я прочитал вики и знаю следующие шаги:

ContainerBuilder builder = new ContainerBuilder();
builder.Register(c => new Logger()).As<ILogger>();
builder.Register(c => new EchoService(c.Resolve<ILogger>())).As<IEchoService>();

using (IContainer container = builder.Build())
{
    Uri address = new Uri("http://localhost:8080/EchoService");
    ServiceHost host = new ServiceHost(typeof(EchoService), address);

host.AddServiceEndpoint(typeof(IEchoService), new BasicHttpBinding(), string.Empty);

host.AddDependencyInjectionBehavior<IEchoService>(container);

host.Description.Behaviors.Add(new ServiceMetadataBehavior {HttpGetEnabled = true, HttpGetUrl = address});
host.Open();

Console.WriteLine("The host has been opened.");
Console.ReadLine();

host.Close();
Environment.Exit(0);

}

У меня есть этот код здесь, чтобы удовлетворить мой сценарий:

builder.RegisterType<RoutingService>().As<ISimplexDatagramRouter>().InstancePerLifetimeScope();

        builder.Register(c =>
        {
            var routingConfiguration = new RoutingConfiguration();
            routingConfiguration.RouteOnHeadersOnly = false;
            return routingConfiguration;
        }).As<RoutingConfiguration>();

        builder.Register(c =>
            {
                var publisherServiceHost = new ServiceHost(typeof(RoutingService));
                publisherServiceHost.AddServiceEndpoint(typeof(ISimplexDatagramRouter), new NetTcpBinding(), "some address");
                publisherServiceHost.Description.Behaviors.Add(new RoutingBehavior(c.Resolve<RoutingConfiguration>()));
                return publisherServiceHost;
            }).As<ServiceHost>();

Это не работает, так как я получаю сообщение об ошибке от Autofac, поскольку он не может найти condtructor для RoutingService (его конструктор является приватным).

У вас есть подсказка?

1 Ответ

0 голосов
/ 10 ноября 2011

Насколько я знаю, класс RoutingService не имеет определенных конструкторов.Вы можете увидеть, что если вы попытаетесь сделать это:

RoutingService rs = new RoutingService ();

Вы получите сообщение об ошибке от компилятора: Тип System.ServiceModel.Routing.RoutingServiceне имеет конструкторов.

...