अगर मैं http://localhost:58472/Account/Register
को सर्फ मैंने इस अपवादवर्तमान प्रकार, IUserStore <ApplicationUser> और DbConnection क्रमश: एक इंटरफेस और अमूर्त वर्ग के हैं और निर्माण नहीं किया जा सकता
System.InvalidOperationException:
वर्तमान प्रकार,IUserStore<ApplicationUser>
, एक इंटरफ़ेस है और इसका निर्माण नहीं किया जा सकता है। क्या आप एक प्रकार मैपिंग खो रहे हैं?
यहाँ मेरी कोड है:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{ }
public static ApplicationUserManager Create(
IdentityFactoryOptions<ApplicationUserManager> options,
IOwinContext context)
{
var manager = new ApplicationUserManager(
new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())
);
// other code
return manager;
}
}
और यहाँ नियंत्रक में कोड है:
[Authorize]
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AccountController()
{
}
public AccountController(
ApplicationUserManager userManager,
ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ??
HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ??
HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
[HttpGet]
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
}
तो तुम अगर आप मेरी कोड को पढ़ने के लिए देख सकते हैं, मैं कुछ भी नहीं करने के लिए बदल दिया है जब आप एक नया एमवीसी प्रोजेक्ट बनाते हैं तो मूल कोड, लेकिन मुझे उपरोक्त त्रुटि मिल गई है। मैंने क्या गलत किया?
मैंने अपने दूसरे कोड ब्लॉक में उसी कोड के साथ ProfileController
नामक एक नया नियंत्रक बनाया है, लेकिन ApplicationSignInManager
के बिना मुझे इसकी आवश्यकता नहीं है।
मैं पंजीकरण और सेवाओं का प्रबंधन करने के लिए एकता कंटेनर का भी उपयोग करता हूं।
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IGenericRepo<Category>, GenericRepo<Category>>();
container.RegisterType<ICategoryService, CategoryService>();
//container.RegisterType<IUser, ApplicationUser>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
अगर मैं उपरोक्त कोड में लाइन uncomment वहाँ कोई अंतर जब मैं साइट चलाने नहीं हैं, यहाँ कोड है।
अद्यतन:
एक टिप्पणी @Jay से मैं एकता प्रबंधक में इस कोड जोड़ दिया गया।
System.InvalidOperationException
:container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>();
अब मैं इस अपवाद मिल गया है वर्तमान प्रकार,
System.Data.Common.DbConnection
, एक अमूर्त वर्ग है और निर्माण नहीं किया जा सकता है। क्या आप एक प्रकार मैपिंग खो रहे हैं?
यहाँ स्टैक ट्रेस से कुछ जानकारी है: जब प्रकार AccountController
के एक नियंत्रक बनाने का प्रयास कर
InvalidOperationException
एक त्रुटि हुई। सुनिश्चित करें कि नियंत्रक के पास पैरामीटर रहित सार्वजनिक कन्स्ट्रक्टर है।
हां, मुझे एक अनुमोदित सार्वजनिक कन्स्ट्रक्टर मिला है।
निर्भरता के
ResolutionFailedException
संकल्प विफल रहा है, type =
"AccountController"
, नाम ="(none)"
।
तो मैं एकता प्रबंधक में इस लाइन को जोड़ दिया है:
container.RegisterType<IDbConnection, DbConnection>();
लेकिन मैं अभी भी एक ही अपवाद है है।
वर्तमान प्रकार,
System.Data.Common.DbConnection
...
अद्यतन:
@RandyLevy द्वारा एक टिप्पणी मैं इस की कोशिश की है से, यह सवाल Configure Unity DI for ASP.NET Identity द्वारा की मदद:
AccountController
को यह जोड़ना:// two fields added private readonly UserManager<ApplicationUser> _userManager; private readonly RoleManager<IdentityRole> _roleManager; // constructor added public AccountController( IUserStore<ApplicationUser> userStore, IRoleStore<IdentityRole> roleStore, ApplicationSignInManager signInManager) { _userManager = new UserManager<ApplicationUser>(userStore); _roleManager = new RoleManager<IdentityRole>(roleStore); SignInManager = signInManager; // I need this } public ApplicationSignInManager SignInManager // I need this { get { return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); } private set { _signInManager = value; } } public UserManager<ApplicationUser> UserManager // replace by other property // type of ApplicationUserManager { get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } //private set // comment this because _usermanager is readonly. //{ // _userManager = value; //} } //public ApplicationUserManager UserManager // replaced by the property type of // // UserManager<ApplicationUser> //{ // get // { // return _userManager ?? // HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); // } // private set // { // _userManager = value; // } //}
UnityManager में इस जोड़ना:
InjectionConstructor accountInjectionConstructor = new InjectionConstructor(new ApplicationDbContext()); container.RegisterType<AccountController>(); container.RegisterType<IController, Controller>(); container.RegisterType <IRoleStore<IdentityRole>, RoleStore<IdentityRole>> (accountInjectionConstructor); // on this line container.RegisterType <IUserStore<ApplicationUser>, UserStore<ApplicationUser>> (accountInjectionConstructor);
लेकिन मैं टिप्पणी के साथ लाइन पर इस त्रुटि (कोई रन टाइम अपवाद) मिल गया है:
प्रकार
RoleStore<IdentityRole>
सामान्य प्रकार या मेथ में प्रकार पैरामीटरTTo
के रूप में उपयोग नहीं किया जा सकता आयुध डिपो नीचे:UnityContainerExtensions.RegisterType<TFrom, TTo> (IUnityContainer, params InjectionMember[])
RoleStore<IdentityRole>
सेIRoleStore<IdentityRole>
करने के लिए कोई अंतर्निहित संदर्भ रूपांतरण नहीं है।
क्या आप IUserStore के लिए एक रजिस्टर प्रकार खो रहे हैं? –
Jay
https://stackoverflow.com/questions/21927785/configure-unity-di-for-asp-net-identity मदद कर सकता है। –
@Jay: धन्यवाद, संकेत के लिए लेकिन अब मुझे एक और अपवाद है। मेरे प्रश्न में अधिक जानकारी। –