Dependency injection 如何通过配置文件进行IServiceLocator构造函数注入?
如何将IServiceLocator注入我的类构造函数 当我试图通过我的配置(如上所述)执行此操作时,我遇到了一个异常,即无法创建RequestHandlersFactory类,因为unity无法找到带有serviceLocator和assemblyName的构造函数 我有两个接口Dependency injection 如何通过配置文件进行IServiceLocator构造函数注入?,dependency-injection,enterprise-library,unity-container,service-locator,Dependency Injection,Enterprise Library,Unity Container,Service Locator,如何将IServiceLocator注入我的类构造函数 当我试图通过我的配置(如上所述)执行此操作时,我遇到了一个异常,即无法创建RequestHandlersFactory类,因为unity无法找到带有serviceLocator和assemblyName的构造函数 我有两个接口 public interface IPublicService { [OperationContract] [ServiceKnownType("GetKnownTypes", typeof(Kno
public interface IPublicService
{
[OperationContract]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypeProvider))]
Response Handle(Request request);
}
public interface IRequestHandlersFactory
{
IRequestHandler GetHandler(Type requestType);
IRequestHandler GetHandler<T>()
where T : Request;
IRequestHandler<T, TK> GetHandler<T, TK>()
where T : Request
where TK : Response;
}
现在我想创建unity配置文件:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IPublicService" type="MyAssembly.IPublicService, MyAssembly"/>
<alias alias="PublicService" type="MyAssembly.PublicService, MyAssembly"/>
<alias alias="IRequestHandlersFactory" type="MyAssembly.IRequestHandlersFactory, MyAssembly"/>
<alias alias="RequestHandlersFactory" type="MyAssembly.RequestHandlersFactory, MyAssembly"/>
<container>
<register type="IPublicService" mapTo="PublicService">
<lifetime type="singleton"/>
</register>
<register type="IRequestHandlersFactory" mapTo="RequestHandlersFactory">
<lifetime type="singleton"/>
<constructor>
<param name="assemblyName">
<value value="MyAssemblyWithHandlers" />
</param>
<param name="serviceLocator" dependencyName="WcfServiceLocator" dependencyType="Microsoft.Practices.ServiceLocation.IServiceLocator, Microsoft.Practices.ServiceLocation"/>
</constructor>
</register>
</container>
我的配置代码:
var container = new UnityContainer();
//configure container
var unitySection = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
var serviceLocator = new UnityServiceLocator(container );
container.RegisterInstance<IServiceLocator>("WcfServiceLocator", serviceLocator, new ContainerControlledLifetimeManager());
unitySection.Configure(container);
var container=newunitycontainer();
//配置容器
var unitySection=(UnityConfigurationSection)ConfigurationManager.GetSection(“unity”);
var serviceLocator=新的UnityServiceLocator(容器);
RegisterInstance(“WcfServiceLocator”、serviceLocator、新ContainerControlled LifetimeManager());
配置(容器);
尝试交换配置文件中构造函数参数的顺序,以便它们与类中的实际参数列表对齐。尝试交换配置文件中构造函数参数的顺序,以便它们与类中的实际参数列表对齐
var container = new UnityContainer();
//configure container
var unitySection = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
var serviceLocator = new UnityServiceLocator(container );
container.RegisterInstance<IServiceLocator>("WcfServiceLocator", serviceLocator, new ContainerControlledLifetimeManager());
unitySection.Configure(container);