Я пытаюсь построить инфраструктуру маршрутизации и использую 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 (его конструктор является приватным).
У вас есть подсказка?