use*_*411 5 .net c# dependency-injection unity-container
如何在配置文件中注册实例
我有这个代码:
UnityContainer.RegisterInstance<ICache>(new CacheMng(HttpRuntime.Cache));
Run Code Online (Sandbox Code Playgroud)
并尝试在配置文件中具有等效项
<register type="ICache" mapTo="CacheMng">
<lifetime type="Singleton"/>
<constructor>
<param name="cache" type="System.Web.Caching" value="HttpRuntime.Cache"/>
</constructor>>
</register>
Run Code Online (Sandbox Code Playgroud)
我的CacheMng类有这个构造函数
public CacheMng(Cache cache)
{
this._cache = cache
}
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
无法解析类型名称或别名System.Web.Caching
您收到错误消息的原因是该type参数需要类型名称而不是命名空间名称。System.Web.Caching是命名空间而不是类型。
执行此操作的唯一方法是编写自定义类型转换器并使用该value元素,如下所示:
<constructor>
<param name="cache">
<value value="" typeConverter="MyHttpRuntimeCacheConverter" />
</param>
</constructor>
Run Code Online (Sandbox Code Playgroud)
类型转换器看起来像这样(最简单的形式):
public class MyHttpRuntimeCacheConverter : System.ComponentModel.TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value,
Type destinationType)
{
return HttpRuntime.Cache;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过实际为 Unityvalue元素提供一个值(例如:)System.Web.HttpRuntime.Cache并根据该值让类型转换器返回正确的对象来使其更普遍适用。
| 归档时间: |
|
| 查看次数: |
7039 次 |
| 最近记录: |