我已经找到了如何使用属性注册类。但是如何使用运行时属性做同样的事情呢?
builder.RegisterType<ClientProfile>()
.WithProperty("Photos", new List<Photo>())
.InstancePerLifetimeScope();
这样的事情:
var a = AutofacHostFactory.Container
.Resolve<ClientProfile>(
new NamedProperty ("id", user.Id),
new NamedProperty ("UserName", user.UserName));
答案 0 :(得分:0)
我认为你必须扩展你的架构。 你要求的是:一个班级怎么能知道&#34;当前用户&#34;?
嗯,您需要为Autofac定义一种方式来提供用户。
例如,您可以定义接口IUserService:
public interface IUserService
{
User GetCurrentUser();
User GetUser(String id);
}
然后通过UserService实现它(如果你真的想,你也可以跳过接口定义)。例如,实现可以找到当前用户读取db,身份验证cookie,app.config或任何适合您的场景的用户。
然后像往常一样将UserService注册为IUserService。
现在您可以定义IUserService类型的构造函数属性,并从中调用GetCurrentUser()。
或者,您可以直接注册用户类型:
builder.Register<User>(c => c.Resolve<IUserService>().GetCurrentUser());
现在您只需要组件中的用户并从那里访问属性。 YMMV,但模式将是这样的:您需要以某种方式定义&#34; UserContext&#34;。
祝你好运!