繁体   English   中英

Autofac传递属性来解决

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM