Tôi cố gắng để sử dụng thống nhất để tự động tiêm một DataContext trên kho lưu trữ của tôi sử dụng một trường hợp mới mỗi lần .., ý tưởng của tôi là đảm bảo rằng mỗi lần một DataContext mới được tiêmUNITY: chuyển vào nội dung dữ liệu mới mỗi lần?
Hiện nay mình không vào việc tạo ra các kho lưu trữ, tôi nghĩ rằng nó không thể giải quyết MyDataContext
Trước khi tạo một constructor vào "kho" (xem dưới đây) để có trong DataContext trên tất cả mọi thứ đã làm việc kho của tôi nhưng bây giờ không nó ..
tôi hiện đã thiết lập này trong container hợp nhất của tôi mà tôi tạo ra trong global.asax, tôi cũng đã đăng ký loại MyDataContext là tiêu chuẩn DataContext
container = new UnityContainer();
Container.RegisterType<MyDataContext, MyDataContext>()
.RegisterType<IOfficeRepository, OfficeRepository>()
.RegisterType<IOfficeService, OfficeService>();
về cơ bản tôi có một dịch vụ mà các cuộc gọi kho như vậy
public class OfficeService : IOfficeService
{
IOfficeRepository repository = null;
public OfficeService(IOfficeRepository repository)
{
this.repository = repository;
if (this.repository == null)
throw new InvalidOperationException("Repository cannot be null");
}
đây là kho lưu trữ của tôi
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db;
public OfficeRepository (MyDataContext dataContext)
{
this.db = dataContext;
}
EDIT
Tôi gần như quên tôi đang làm điều này để tạo dịch vụ
officeService = Bootstrapper.Container.Resolve<IOfficeService>();
EDIT - THE ERROR được tạo
Resolution of the dependency failed, type = "MarkSmith.IOfficeService", name = "".
Exception message is: The current build operation (build key Build
Key[MarkSmith.OfficeService, null]) failed: The parameter repository could not be
resolved when attempting to call constructor
MarkSmith.OfficeService(MarkSmith.IOfficeRepository repository). (Strategy type BuildPlanStrategy, index 3)
EDIT - REMOVING Constructor vào kho làm việc
Nó là một cái gì đó để làm với các DataContext bởi vì nếu tôi loại bỏ các constrcutor trên kho chứa một DataContext sau đó tất cả các công trình, nhưng tất nhiên tôi cần nó để chấp nhận một DataContext để có thể tiêm một datacontext "MỚI" mỗi lần
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db new MyDataContext(); // CHANGE
//public OfficeRepository (MyDataContext dataContext)
//{
//this.db = dataContext;
//}
EDIT - THỰC TẾ LỖI
Sau khi đào sâu hơn tôi đã tìm thấy lỗi này ....
The type MyDataContext has multiple constructors of length 2.
Unable to disambiguate. (Strategy type DynamicMethodConstructorStrategy, index 0)
(Strategy type BuildPlanStrategy, index 3)
EDIT - THI GIẢI QUYẾT DataContext với 1 dòng mã
Điều này cũng không thành công với cùng một lỗi như trên - nhiều nhà thầu
MyDataContext test = Bootstrapper.Container.Resolve<MyDataContext >();
EDIT - TẤT CẢ Constructors trên DataContext MY
Chúng được tạo ra bởi một util exernal nhưng tất cả nên cũng ..
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext()
: base(ConnectionString, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
EDIT - Để chứng minh việc tạo ra DataContext trong mã mà không Unity hoạt động 100% mà không vấn đề
MyDataContext tes2t = new MyDataContext();
Cập nhật câu hỏi để chứng tỏ tôi đang giải quyết vụ của tôi sử dụng thống nhất –
Điều gì xảy ra nếu bạn cố gắng để giải quyết một trường hợp MyDataContext sử dụng tại các điểm khác nhau? Mọi thứ dường như theo thứ tự, nhưng điều đó có thể cho chúng ta một đầu mối. – GraemeF
Ngoài ra, có thiếu dòng hay lỗi đánh máy trong trích xuất mã đầu tiên không? Có vẻ như 'container' và' Container' sẽ là các trường hợp khác nhau. Bạn có thể kiểm tra xem bạn có cá thể nào bạn mong đợi bằng cách sử dụng trình gỡ lỗi hay không. – GraemeF