在 ServiceStack 服务中使用 MEF
Use MEF in ServiceStack services
我正在尝试将 MEF 用作 ServiceStack (https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container) 中的 ContainerAdapter。
我制作了 ContainerAdapter:
internal class MefIocAdapter : IContainerAdapter
{
private readonly CompositionContainer _container;
internal MefIocAdapter(CompositionContainer container)
{
_container = container;
}
public T TryResolve<T>()
{
return _container.GetExportedValue<T>();
}
public T Resolve<T>()
{
return _container.GetExportedValueOrDefault<T>();
}
}
并像这样注册:
public override void Configure(Container container)
{
container.Adapter = new MefIocAdapter(_mefContainer);
}
通过 RegisterService(System.Type, String) 函数注册服务后,我收到 MEF 的异常。找不到出口:
ContractName ServiceStack.Auth.IAuthSession
RequiredTypeIdentity ServiceStack.Auth.IAuthSession
我是不是误会了什么?
为什么Funq要求适配器容器解析内部ServiceStack的依赖?
funq 会使用 MEF 实例化我的服务吗? (如果没有,有服务工厂之类的吗?)
P.S。当我删除 container.Adapter 赋值时它起作用了(但我的 MEF 依赖项为空)。
当您注册容器适配器时,您告诉 ServiceStack 解决适配器的所有依赖关系,如果首先在您的适配器中找不到依赖关系,它只会搜索 ServiceStack 的 IOC .
这里的问题是 IAuthSession
是一个可选的 属性 依赖项,您的适配器应该 return null
如果该依赖项不存在,那么 ServiceStack 可以检查Funq 中的依赖项。
在您的适配器中,您弄错了 Resolve<T>
(用于解析构造函数依赖项)return 的默认值,TryResolve<T>
抛出异常当它应该 return 默认值时不存在。所以我会将您的适配器实现更改为:
public T TryResolve<T>()
{
return _container.GetExportedValueOrDefault<T>();
}
public T Resolve<T>()
{
return _container.GetExportedValue<T>();
}
我正在尝试将 MEF 用作 ServiceStack (https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container) 中的 ContainerAdapter。
我制作了 ContainerAdapter:
internal class MefIocAdapter : IContainerAdapter
{
private readonly CompositionContainer _container;
internal MefIocAdapter(CompositionContainer container)
{
_container = container;
}
public T TryResolve<T>()
{
return _container.GetExportedValue<T>();
}
public T Resolve<T>()
{
return _container.GetExportedValueOrDefault<T>();
}
}
并像这样注册:
public override void Configure(Container container)
{
container.Adapter = new MefIocAdapter(_mefContainer);
}
通过 RegisterService(System.Type, String) 函数注册服务后,我收到 MEF 的异常。找不到出口:
ContractName ServiceStack.Auth.IAuthSession
RequiredTypeIdentity ServiceStack.Auth.IAuthSession
我是不是误会了什么?
为什么Funq要求适配器容器解析内部ServiceStack的依赖?
funq 会使用 MEF 实例化我的服务吗? (如果没有,有服务工厂之类的吗?)
P.S。当我删除 container.Adapter 赋值时它起作用了(但我的 MEF 依赖项为空)。
当您注册容器适配器时,您告诉 ServiceStack 解决适配器的所有依赖关系,如果首先在您的适配器中找不到依赖关系,它只会搜索 ServiceStack 的 IOC .
这里的问题是 IAuthSession
是一个可选的 属性 依赖项,您的适配器应该 return null
如果该依赖项不存在,那么 ServiceStack 可以检查Funq 中的依赖项。
在您的适配器中,您弄错了 Resolve<T>
(用于解析构造函数依赖项)return 的默认值,TryResolve<T>
抛出异常当它应该 return 默认值时不存在。所以我会将您的适配器实现更改为:
public T TryResolve<T>()
{
return _container.GetExportedValueOrDefault<T>();
}
public T Resolve<T>()
{
return _container.GetExportedValue<T>();
}