2009-07-02 25 views
7

Tôi đang cố định cấu hình NCommon NHRepository trong dự án của tôi với Sơ đồ cấu trúc. Làm thế nào để ngăn chặn nó từ việc lựa chọn các nhà xây dựng tham lam?Bản đồ cấu trúc - Tôi không muốn sử dụng hàm tạo tham lam!

public class NHRepository<TEntity> : RepositoryBase<TEntity> 
{ 

    public NHRepository() {} 


    public NHRepository(ISession session) 
    { 
     _privateSession = session; 
    } 

    ... 
} 

My cấu hình bản đồ cấu trúc

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof(NHRepository<>)) 

Cheers Jake

Trả lời

8

Bạn có thể thiết lập các thuộc tính [DefaultConstructor] cho các nhà xây dựng mà bạn muốn như một mặc định. Trong trường hợp của bạn, thiết lập nó trên các constructor NHRepository() sẽ làm cho nó trở thành mặc định constuctor cho StructureMap để khởi tạo.

Cập nhật: tốt, trong phiên bản mới nhất của StructureMap, sử dụng .NET 3.5 bạn cũng có thể xác định nó bằng cách sử dụng phương pháp SelectConstructor:

var container = new Container(x => 
{ 
    x.SelectConstructor<NHRepository>(()=>new NHRepository()); 
}); 

Cuối cùng, tôi chắc chắn rằng bạn sẽ có thể xác định nó trong cấu hình XML của StructureMap, nhưng tôi đã không sử dụng nó. Bạn có thể tìm kiếm một chút về nó. Để biết thêm thông tin về các phương pháp trên, xem: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

Hi Razzie, cổ vũ cho câu trả lời, tuy nhiên NHRepository nằm trong NCommon.NHibernate.dll mà tôi không thể thay đổi. Vì vậy, tôi nên chỉ kế thừa từ NHRepository trong dự án của tôi, và đặt thuộc tính trên constructor của nó để thay thế? – superlogical

+0

Tôi đã không mặc dù về điều đó. Xem câu trả lời cập nhật của tôi để sử dụng phương pháp SelectConstructor, nhưng điều đó chỉ có thể trong .NET 3.5 – Razzie

+0

Cảm ơn rất nhiều vì điều này! Stackoverflow thật tuyệt vời! – superlogical

1

Vì vậy, 1 cho giải Mâm xôi vàng vì điều này sẽ làm việc nếu NHRepository là trong lắp ráp của riêng tôi, thay vào đó tôi chọn để quấn NHRepository với Repository của riêng tôi như dưới đây ..

public class Repository<T> : NHRepository<T> 
{ 
    [DefaultConstructor] 
    public Repository() 
    { 

    } 

    public Repository(ISession session) 
    { 

    } 
} 

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof (Repository<>)); 
Các vấn đề liên quan