autofac - 使用 Resolve 获取类型时,如何为该类型的属性设置值
问题描述
现在我想在使用 Resolve 获取测试时,如何将值设置为该类型的“名称”属性
public class test
{
public string Name{get;set;}
public string Text{get;set;
}
按组件注册类型
public void Register<T>(Assembly[] assemblies)
{
_builder.RegisterAssemblyTypes(assemblies)
.Where(t => typeof(T).IsAssignableFrom(t) && !t.IsAbstract)
.Named<T>(t => t.FullName)
.AsSelf()
.AsImplementedInterfaces();
}
获取类型
public T Resolve<T>(string name)
{
return _container.ResolveNamed<T>(name);
}
var t = Resolve<ITest>("Test.Autofac.test");
相似的
var t = new test();
t.Name="test";
目前ResolveNamed似乎只支持构造函数,我想直接设置属性值而不是泛型构造函数
ResolveNamed(this IComponentContext context, string serviceName, IEnumerable parameters)
解决方案
如果我没看错,我认为您想要的是property injection。
您可以在注册时注册属性值...
builder.RegisterType<T>().WithProperty("Name", "value");
或者您可以在解决时通过它...
container.Resolve<T>(new NamedPropertyParameter("Name", "value"));
您可以像调用一样在调用中使用NamedPropertyParameter
(就像所有参数一样)。ResolveNamed<T>
Resolve<T>
推荐阅读
- file - 列表列表到元组列表
- python-3.x - 如何将 GPS 坐标的折线转换为以 GPS 坐标为顶点的多边形并在 Python 中找到其区域
- javascript - 无法设置远程应答 sdp:无法应用 m= 部分的描述,其中 mid='0':无法为传输设置 SSL 角色
- macos - 谁能帮我解决第 114 行的 apache 错误?
- c# - 如何在 C# 中比较两个 GUID 值(一个来自数据库,一个在“if”语句中手动编码)?
- linux - 将 vim 配色方案应用于 sudo root 但不影响其他用户 sudo
- websocket - 使用 wscat 测试(学习)websockify,可以监听但发送任何内容都会导致断开连接
- godot - 未在继承类中声明的方法
- javascript - 派生一个子进程并将反应组件作为参数传递
- python - if 语句在 AWS lambda 控制台中不起作用