簡體   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