Я хочу зарегистрировать каналы WCF-клиента в autofac, поэтому я могу разрешить их просто путем включения интерфейса контракта на обслуживание в конструкторе, например. как это:Регистрация клиентских каналов WCF с помощью autofac
public LoginFormController(ILoginService loginService)
{ ...
Я завод, который создает каналы для меня, с одним общим родовым способом:
public T GetChannel<T>()
Я зарегистрировал свой завод:
Builder.RegisterType<ClientChannelManager>().As<IClientChannelManager>();
Я могу» t выяснить, есть ли синтаксис для регистрации моего клиентского канала. Это работает, но это не то, что я хочу:
Builder.Register(c => new ClientChannelManager(new SettingsProvider()).GetChannel<ILoginService>()).As<ILoginService>();
Вместо того чтобы создавать новый экземпляр ClientChannelManager и его аргументы конструктора, я хочу решить из контейнера.
Лучшее, что я придумал статический метод GetChannel в моей фабрике, которая разрешает экземпляр из контейнера в явном виде:
public static T ResolveChannel<T>(IComponentContext context)
{
IClientChannelManager manager = context.Resolve<IClientChannelManager>();
return manager.GetChannel<T>();
}
и зарегистрировать договор на обслуживание с помощью вызова статического метода:
Builder.Register(c => ClientChannelManager.ResolveChannel<ILoginService>(c)).As<ILoginService>();
Кто-нибудь знает более элегантный синтаксис/решение для этого?