2016-11-25 5 views
1

私はサービスを持っており、実際にはすべての方法で現在のユーザーが実行する必要があります。オートファック現在の身元確認の取得

private IOrderProvider _orderProvider; 

public IOrderProvider OrderProvider => _orderProvider ?? (_orderProvider = new OrderProvider((ClaimsIdentity)User.Identity)); 

これは、コントローラのパブリックプロパティがあったため、それがユーザーへのアクセスを持っているでしょう:私はautofacの使用を開始する前に、私は基本的にこのようなパブリックプロパティを作成しました。今すぐautofacを使用して、サービスStartupConfigに登録します。当然私はユーザーへのアクセス権を持っていません。

OrderProviderコンストラクタに現在のユーザを注入する方法がありますか、それとも別の方法ですか?

+0

Cr HttpContextをラップし、ユーザーの原則またはアイデンティティを公開するサービスを作成します。これまでにあなたが望んでいるのはどれですか – Nkosi

+0

私に例をあげることができますか? – r3plica

+0

チェックインの例 – Nkosi

答えて

2

ユーザの原則にはHttpContext.Current.Userからアクセスできます。 HttpContextにコードを強く結合することは、それが非常に単体テストではありません。あなたが望むものを公開するサービスを作成してください。

public interface IPrincipleProvider { 
    IPrincple User { get; } 
} 

本番環境での実装は、次のようになります。その行わアップデートで

public class DefaultPrincipleProvider : IPrincipleProvider { 
    public IPrincple User { get { return HttpContext.Current.User; } } 
} 

依存クラスのサービスが得るすべてが注入すべき抽象

public class OrderProvider : IOrderProvider { 
    private readonly ClaimsIdentity identity; 
    public OrderProvider(IPrincipleProvider provider) { 
     identity = (ClaimsIdentity)provider.User.Identity; 
    } 
    //...other code 
} 

を使用して、通常の

//...other code removed for brevity 

builder.RegisterType<DefaultPrincipleProvider>().As<IPrincipleProvider>(); 
builder.RegisterType<OrderProvider>().As<IOrderProvider>(); 

//...other code removed for brevity 

として起動時にプロバイダを登録する

public class Service { 
    private readonly IOrderProvider _orderProvider; 

    public Service(IOrderProvider orderProvider) { 
     _orderProvider = orderProvider; 
    } 

    public IOrderProvider OrderProvider => _orderProvider; 
} 
+0

この「サービス」では、登録する必要はありませんか?コントローラに注入されますか?私は 'private readonly Service _service'のようなことをしなければならないと思っています。そして、私が注文プロバイダを望むときに' _service.OrderProvider'をする必要がありますか? – r3plica

+0

はい。私はIPrincipleにアクセスすることに関連する部分だけを実演しました。私はあなたのアーキテクチャについて十分な知識がありません。それは単純な例でした。私はあなたのサービスが既に登録されていると思っていました。 – Nkosi

+0

私はorderProviderのラッパーサービスについて話していますか?あなたがコントローラとしてそれを見ない限り? – r3plica

関連する問題