Tôi đã làm theo hướng dẫn này , nó đã hoạt động tốt, cho đến khi tôi sửa đổi DbContext
để có thêm một hàm tạo. Tôi hiện đang gặp sự cố với giải pháp và không biết phải làm gì để khắc phục sự cố này. Có cách nào dễ dàng để buộc nó lấy hàm tạo không tham số hoặc tôi đang tiếp cận điều này không chính xác?
DbContext
với hai hàm tạo:
public class DashboardDbContext : DbContext
{
public DashboardDbContext() : base("DefaultConnection") { }
public DashboardDbContext(DbConnection dbConnection, bool owns)
: base(dbConnection, owns) { }
}
SiteController
constructor:
private readonly IDashboardRepository _repo;
public SiteController(IDashboardRepository repo)
{
_repo = repo;
}
Kho:
DashboardDbContext _context;
public DashboardRepository(DashboardDbContext context)
{
_context = context;
}
UnityResolver
mã:
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);
Lỗi từ Cuộc gọi WebApi:
System.InvalidOperationException: Đã xảy ra lỗi khi cố gắng tạo bộ điều khiển loại 'SiteController'. Đảm bảo rằng bộ điều khiển có một hàm tạo công khai không tham số.
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: Nhập 'Dashboard.Web.Controllers.SiteController' không có hàm tạo mặc định.
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)
Hướng dẫn này rất tuyệt và đã hoạt động tốt cho tôi cho đến khi tôi thêm hàm tạo thứ hai.
SiteController
?
DbContext
vào kho lưu trữ?
SiteController
là thứ phải có một hàm tạo không paramertless, không phải vậyDashboardDbContext
.