ChannelFactory 的简单注入器注册

问题描述 投票:0回答:0

这是我的代码。

注册界面

public static void RegisterProxies(this Container container)
{
    container.Register<IServiceFactory, ServicesFactory>(); 
    container.Register(() => container.GetInstance<IServiceFactory>().CreateUiSettingsProxy());      
} 

与实施的接口。

 public interface IServiceFactory
 {
     IUiSettings CreateUiSettingsProxy();
 }

 public class ServicesFactory : IServiceFactory
 {
     public IUiSettings CreateUiSettingsProxy()
     {
         return CreateProxy<IUiSettings>("someEndpoint");
     }
    
     private T CreateProxy<T>(string endpointName)
     {
         var factory = new ChannelFactory<T>(endpointName);
         var channel = factory.CreateChannel();
         return channel;
     }
 }

我在这里调用一些方法时出错。 设置为 true ResolveUnregisteredConcreteTypes 没有帮助。

System.ServiceModel.FaultException`1: '找不到类型 UiSettings 的注册。确保 UiSettings 已注册,例如通过调用“Container.Register();”在注册阶段。虽然有 IUiSettings 的注册,它映射到 UiSettings。您是否打算改为请求 IUiSettings?无法进行隐式注册,因为 Container.Options.ResolveUnregisteredConcreteTypes 设置为“false”,现在是 v5 中的默认设置。这不允许容器构造此未注册的具体类型。有关为什么现在默认不允许解析未注册的具体类型的更多信息,以及您可以应用哪些可能的修复,请参阅https://simpleinjector.org/ructd.

这里是堆栈跟踪:

在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) 在 IUiSettings.SomeMethod() 在 C 中的 MvcApplication.Session_Start():pp\Global.asax.cs:line 46

var uiSettings = DependencyResolver.Current.GetService<IUiSettings>();
uiSettings.SomeMethod();
asp.net-mvc dependency-injection simple-injector
© www.soinside.com 2019 - 2024. All rights reserved.