使用 Resolve 获取类型时,如何将值设置为该类型的 属性
When using Resolve to get a type, how do You set a value to an property of that type
现在我想
使用 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(此 IComponentContext 上下文,字符串 serviceName,IEnumerable 参数)
如果我没看错的话,我想你想要的是 property injection。
您可以在注册时注册 属性 值...
builder.RegisterType<T>().WithProperty("Name", "value");
或者您可以在解决时传递它...
container.Resolve<T>(new NamedPropertyParameter("Name", "value"));
您可以像 Resolve<T>
调用一样在 ResolveNamed<T>
调用中使用 NamedPropertyParameter
(就像 all parameters)。
现在我想 使用 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(此 IComponentContext 上下文,字符串 serviceName,IEnumerable 参数)
如果我没看错的话,我想你想要的是 property injection。
您可以在注册时注册 属性 值...
builder.RegisterType<T>().WithProperty("Name", "value");
或者您可以在解决时传递它...
container.Resolve<T>(new NamedPropertyParameter("Name", "value"));
您可以像 Resolve<T>
调用一样在 ResolveNamed<T>
调用中使用 NamedPropertyParameter
(就像 all parameters)。