使用 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)。