[英]Autofac - passing a value inside a .OnActivated Method at the Resolve time
[英]Autofac passing properties to resolve
我发现了如何使用属性注册类。 但是如何使用运行时属性做同样的事情?
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));
我认为您必须扩展架构。 您要的是:一个类如何知道“当前用户”?
好了,您需要定义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());
现在,您只需要组件中的一个User即可从那里访问属性。 YMMV,但是模式将是这样:您需要以某种方式定义“ UserContext”。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.