Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 身份提供者和统一依赖注入_C#_Asp.net Mvc_Dependency Injection_Asp.net Identity - Fatal编程技术网

C# 身份提供者和统一依赖注入

C# 身份提供者和统一依赖注入,c#,asp.net-mvc,dependency-injection,asp.net-identity,C#,Asp.net Mvc,Dependency Injection,Asp.net Identity,我已下载此示例,在其中我可以尝试ASP.NET MVC 5中的Identity Provider功能: 我已经多次将Unity DI用于我的存储库、服务、工作单元和其他东西,没有任何问题 但是现在,当我安装Unity DI时,我对使用身份提供者的接口和DI有很多问题 我刚刚下载了示例的代码,并配置了Unity DI,但我不想将Unity用于身份成员身份,我只想将Unity DI用于我自己的东西(IRepository、iSeries、IUnitOfWork等) 尝试注册用户时出现以下错误: 当

我已下载此示例,在其中我可以尝试ASP.NET MVC 5中的Identity Provider功能:

我已经多次将Unity DI用于我的存储库、服务、工作单元和其他东西,没有任何问题

但是现在,当我安装Unity DI时,我对使用身份提供者的接口和DI有很多问题

我刚刚下载了示例的代码,并配置了Unity DI,但我不想将Unity用于身份成员身份,我只想将Unity DI用于我自己的东西(IRepository、iSeries、IUnitOfWork等)

尝试注册用户时出现以下错误:

当前类型, Microsoft.AspNet.Identity.IUserStore`1[Ecoavantis.Interactive.GCI.Models.ApplicationUser], 是一个接口,无法构造。你缺一种吗 映射

我读了一些帖子,他们说我必须包括这样的内容,但我不需要在身份提供者中注入依赖项

container.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
            container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
container.RegisterType(新的层次结构CallifetimeManager());
RegisterType(新的层次结构CallifetimeManager());
有人能帮我吗

代码示例:

 /// <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: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
            // container.LoadConfiguration();
            // TODO: Register your types here


            //container.RegisterType<DbContext, ApplicationDbContext>(new ContainerControlledLifetimeManager());
            container.RegisterType<IUnitOfWorkAsync, UnitOfWork>(new PerRequestLifetimeManager());
            container.RegisterType<IMainPanelService, MainPanelService>();
            container.RegisterType(typeof (IRepositoryAsync<>), typeof (Repository<>));
            container.RegisterType<IDataContextAsync, ecoavantisinteractivegciContext>(new PerRequestLifetimeManager());
         }
///向Unity容器注册类型映射。
///要配置的unity容器。
///不需要注册控制器或API控制器等具体类型(除非您想注册)
///更改默认值),因为Unity允许解析具体类型,即使它以前没有注册。
公共静态无效注册表类型(IUnityContainer容器)
{
//注意:若要从web.config加载,请取消对以下行的注释。请确保将Microsoft.Practices.Unity.Configuration添加到using语句中。
//container.LoadConfiguration();
//TODO:在此处注册您的类型
//RegisterType(新的ContainerControlledLifetimeManager());
RegisterType(新PerRequestLifetimeManager());
container.RegisterType();
RegisterType(typeof(IRepositoryAsync),typeof(Repository));
RegisterType(新PerRequestLifetimeManager());
}

好的,我已经解决了我的问题,我已经用这个方法注入了依赖项,但是我不太明白为什么它会起作用

现在,身份与我的统一DI配合得很好

container.RegisterType<AccountController>(new InjectionConstructor());
container.RegisterType<RolesAdminController>(new InjectionConstructor());
container.RegisterType<ManageController>(new InjectionConstructor());
container.RegisterType<UsersAdminController>(new InjectionConstructor());
container.RegisterType(新注入构造函数());
RegisterType(新的InjectionConstructor());
RegisterType(新的InjectionConstructor());
RegisterType(新的InjectionConstructor());

谢谢chemitaxis!由于我没有足够的代表发表评论,我发布了一个新的答案。我假设chemitaxis自己创建了最后3个控制器,因为简单地注册第一个
AccountController
似乎对我有效,即使我扩展了
用户
模型属性:

container.RegisterType<AccountController>(new InjectionConstructor());
container.RegisterType(新注入构造函数());

在我的例子中,我在RegisterComponents方法中将以下内容添加到UnityConfig.cs中

container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>();
container.RegisterType();

化学性和hvaughan3答案的更新。由于您说在尝试注册用户时会发生这种情况,因此它可能位于标准的
AccountController
中。最初的问题是Unity试图使用两个参数调用构造函数,例如:

public AccountController(
    ApplicationUserManager userManager,
    ApplicationSignInManager signInManager)
{
    UserManager = userManager;
    SignInManager = signInManager;
}
下一行将告诉Unity调用无参数构造函数,而不需要其他任何东西

container.RegisterType<AccountController>(new InjectionConstructor());
container.RegisterType(新注入构造函数());

我希望这个解释有帮助

ApplicationUser类是什么样子的?这是说当它是一个接口时,它被用作一个类。如果您使用的是应用程序用户界面,您是否尝试过为该界面配置DI及其实现?是的,我尝试过,但不起作用。。。我有一些类似的问题:(晚会有点晚了)。这些指令强制unity在创建AccountController时使用无参数构造函数(InjectionConstructor对象为空)。否则Unity将尝试解析“最指定的”构造函数(并且将失败)。或者将[InjectionConstructor]属性放置在AccountController中的空构造函数上。