首页 > 解决方案 > 使用 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)

标签: autofac

解决方案


如果我没看错,我认为您想要的是property injection

您可以在注册时注册属性值...

builder.RegisterType<T>().WithProperty("Name", "value");

或者您可以在解决时通过它...

container.Resolve<T>(new NamedPropertyParameter("Name", "value"));

您可以像调用一样在调用中使用NamedPropertyParameter(就像所有参数一样)。ResolveNamed<T>Resolve<T>


推荐阅读