ฉันได้ทำตามบทช่วยสอนนี้ซึ่งใช้งานได้ดีจนกระทั่งฉันแก้ไขDbContext
ให้มีตัวสร้างเพิ่มเติม ตอนนี้ฉันมีปัญหากับการแก้ปัญหาและไม่แน่ใจว่าจะต้องทำอย่างไรเพื่อแก้ไขปัญหานี้ มีวิธีง่ายๆในการบังคับให้คว้าตัวสร้างแบบไม่มีพารามิเตอร์หรือฉันเข้าใกล้สิ่งนี้ไม่ถูกต้อง?
DbContext
ด้วยตัวสร้างสองตัว:
public class DashboardDbContext : DbContext
{
public DashboardDbContext() : base("DefaultConnection") { }
public DashboardDbContext(DbConnection dbConnection, bool owns)
: base(dbConnection, owns) { }
}
SiteController
ตัวสร้าง:
private readonly IDashboardRepository _repo;
public SiteController(IDashboardRepository repo)
{
_repo = repo;
}
ที่เก็บ:
DashboardDbContext _context;
public DashboardRepository(DashboardDbContext context)
{
_context = context;
}
UnityResolver
รหัส:
public class UnityResolver : IDependencyResolver
{
private readonly IUnityContainer _container;
public UnityResolver(IUnityContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}
public IDependencyScope BeginScope()
{
var child = _container.CreateChildContainer();
return new UnityResolver(child);
}
public void Dispose()
{
_container.Dispose();
}
}
WebApiConfig:
var container = new UnityContainer();
container.RegisterType<IDashboardRepository, DashboardRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
ข้อผิดพลาดจาก WebApi Call:
System.InvalidOperationException: เกิดข้อผิดพลาดขณะพยายามสร้างตัวควบคุมประเภท 'SiteController' ตรวจสอบให้แน่ใจว่าคอนโทรลเลอร์มีตัวสร้างสาธารณะแบบไม่มีพารามิเตอร์
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()
InnerException: System.ArgumentException: พิมพ์ 'Dashboard.Web.Controllers.SiteController' ไม่มีตัวสร้างเริ่มต้น
at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
บทแนะนำนี้ยอดเยี่ยมและทำงานได้ดีสำหรับฉันจนกระทั่งฉันเพิ่มตัวสร้างที่สอง
SiteController
?
DbContext
เข้าไปในที่เก็บ?
SiteController
เป็นสิ่งที่ต้องมีคอนสตรัค paramertlessDashboardDbContext
ไม่