Autofac传递属性以解决

时间:2015-12-05 11:29:11

标签: c# properties autofac

我已经找到了如何使用属性注册类。但是如何使用运行时属性做同样的事情呢?

 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));

1 个答案:

答案 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;。

祝你好运!