Wcf 如何使用unity容器通过传递类型进行解析?
我正在尝试使用Microsoft站点中提供的以下示例。按类型解析时给出编译时错误 这是代码中的问题,如何解决Wcf 如何使用unity容器通过传递类型进行解析?,wcf,unity-container,Wcf,Unity Container,我正在尝试使用Microsoft站点中提供的以下示例。按类型解析时给出编译时错误 这是代码中的问题,如何解决 public class DependencyInjectionInstanceProvider : IInstanceProvider { private readonly Type _ServiceType; public DependencyInjectionInstanceProvider(Type serviceType) { _S
public class DependencyInjectionInstanceProvider : IInstanceProvider
{
private readonly Type _ServiceType;
public DependencyInjectionInstanceProvider(Type serviceType)
{
_ServiceType = serviceType;
}
public object GetInstance(InstanceContext instanceContext)
{
return GetInstance(instanceContext, null);
}
public object GetInstance(InstanceContext instanceContext, Message message)
{
return DependencyFactory.Resolve(_ServiceType); //error
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
}
}
public class DependencyFactory
{
private static IUnityContainer _container;
public static IUnityContainer Container
{
get
{
return _container;
}
private set
{
_container = value;
}
}
static DependencyFactory()
{
var container = new UnityContainer();
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
if (section != null)
{
section.Configure(container);
}
_container = container;
}
public static T Resolve<T>()
{
T ret = default(T);
if (Container.IsRegistered(typeof(T)))
{
ret = Container.Resolve<T>();
}
return ret;
}
}
公共类DependencyInjectionInstanceProvider:IInstanceProvider
{
私有只读类型_ServiceType;
公共依赖项InjectionInstanceProvider(类型serviceType)
{
_服务类型=服务类型;
}
公共对象GetInstance(InstanceContext InstanceContext)
{
返回GetInstance(instanceContext,null);
}
公共对象GetInstance(InstanceContext InstanceContext,消息)
{
返回DependencyFactory.Resolve(_ServiceType);//错误
}
public void ReleaseInstance(InstanceContext InstanceContext,对象实例)
{
}
}
公共类依赖工厂
{
专用静态IUnityContainer\u容器;
公共静态IUnityContainer容器
{
得到
{
返回容器;
}
专用设备
{
_容器=价值;
}
}
静态依赖工厂()
{
var container=new UnityContainer();
var section=(UnityConfigurationSection)ConfigurationManager.GetSection(“unity”);
if(节!=null)
{
配置(容器);
}
_容器=容器;
}
公共静态T解析()
{
T ret=默认值(T);
if(容器已注册(类型(T)))
{
ret=Container.Resolve();
}
返回ret;
}
}
很抱歉回答了这么长时间,但我只是在这几天才开始使用Unity。
也许你必须这样打电话:
DependencyFactory.Resolve<_ServiceType>();
DependencyFactory.Resolve();
我认为问题在于您将类型视为调用者中的参数。
查看此链接示例代码有一个
DependencyFactory.Resolve()
,但没有DependencyFactory.Resolve(键入typeToResolve)
您可以实现DependencyFactory.Resolve(键入typeToResolve)来复制示例逻辑(请参阅以使用类型创建默认值)
最简单的解决方案是访问容器成员
确保包括使用Microsoft.Practices.Unity强>
public object GetInstance(InstanceContext instanceContext, Message message)
{
return DependencyFactory.Container.Resolve(_serviceType);
}
在这件事上和你在一起。我知道如果我能找到答案,答案会很简单。