忙しいのですが、少し調べてみたのでメモします。
UnityConfig.csで設定したApplicationContextをApplicationUserManagerで利用するためには、Startup.Auth.cs
でUnityConfigで設定したApplicationContextを指定すればよい。
UnityConfig.cs
/// <summary> /// Specifies the Unity configuration for the main container. /// </summary> public class UnityConfig { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); #region Unity Container private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => { var container = new UnityContainer(); RegisterTypes(container); return container; }); /// <summary> /// Gets the configured Unity container. /// </summary> public static IUnityContainer GetConfiguredContainer() { return container.Value; } #endregion /// <summary>Registers the type mappings with the Unity container.</summary> /// <param name="container">The unity container to configure.</param> /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks> public static void RegisterTypes(IUnityContainer container) { // NOTE: ここにDI対象の設定を行う container.RegisterType<AccountController>(new InjectionConstructor()); container.RegisterType<ManageController>(new InjectionConstructor()); // ApplicationDbContextの実行SQLをログに出力する container.RegisterType<ApplicationDbContext>(new PerRequestLifetimeManager(), new InjectionFactory(_ => { var basicContext = new ApplicationDbContext(); basicContext.Database.Log = s => { if (Logger.IsDebugEnabled) { Logger.Debug("SQL:{0}", s); } }; return basicContext; })); container.RegisterType<IApplicationUserRepository, ApplicationUserRepository>(); } }
Startup.Auth.cs
public partial class Startup { // 認証設定の詳細については、http://go.microsoft.com/fwlink/?LinkId=301864 を参照してください public void ConfigureAuth(IAppBuilder app) { // UnityのContainerを取得する var container = UnityConfig.GetConfiguredContainer(); // UnityContainerに設定されているApplicationDbContextを設定する。 app.CreatePerOwinContext<ApplicationDbContext>((options, owinContext) => container.Resolve<ApplicationDbContext>()); // 以下は変更なし app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); ... } }
これでApplicationDbContextをApplicationUserManagerと共有できるようになります。
- 作者: 山田祥寛
- 出版社/メーカー: 秀和システム
- 発売日: 2014/09/22
- メディア: 単行本
- この商品を含むブログ (4件) を見る