我不确定如何使用StructureMap扫描特定命名空间中的所有存储库。大多数存储库采用以下形式:
namespace CPOP.Infrastructure.Repositories
{
public class PatientRepository : LinqRepository<Patient>, IPatientRepository
{
}
}
namespace CPOP.Infrastructure.Repositories
{
public class LinqRepository<T> : Repository<T>, ILinqRepository<T>
{
}
}
namespace CPOP.Domain.Contracts.Repositories
{
public interface IPatientRepository : ILinqRepository<Patient>
{
}
}
我试过了:
x.Scan(scanner =>
{
scanner.Assembly(Assembly.GetExecutingAssembly());
scanner.ConnectImplementationsToTypesClosing(typeof(ILinqRepository<>));
})
但是,它只会选择LinqRepository
类。获取我将要在那里倾倒的各种存储库的最佳方法是什么?
而且,按照约书亚的回应,这是一个使用的例子:
namespace CPOP.ApplicationServices
{
public class PatientTasks : IPatientTasks
{
private readonly IPatientRepository _patientRepository;
public PatientTasks(IPatientRepository patientRepository)
{
_patientRepository = patientRepository;
}
public Patient GetPatientById(int patientId)
{
int userId; // get userId from authentication mechanism
return _patientRepository.FindOne(new PatientByIdSpecification(patientId));
}
public IEnumerable<Patient> GetAll()
{
int userId; // get userId from authentication mechanism
return _patientRepository.FindAll();
}
}
}
答案 0 :(得分:2)
只需在配置中使用一行代码即可完成此操作。假设你有这个:
实体: - 客户 - 订单
并拥有这样的通用存储库模型:
并提供类似的应用服务:
public AppService(IRepository<Customer> custRepo, IRepository<Order> orderRepo)
你会有这样的事情。请注意有关使用扫描程序连接自定义存储库的信息。
public class SmRegistry : Registry
{
public SmRegistry()
{
For(typeof (IRepository<>))
.Use(typeof (Repository<>));
//using this will find any custom repos, like CustomerRepository : Repository<Customer>
//Scan(scanner =>
// {
// scanner.TheCallingAssembly();
// scanner.ConnectImplementationsToTypesClosing(typeof (IRepository<>));
// });
}
}
假设您的存储库是在应用程序的其他程序集中定义的,您可以使用注册表将它们连接在一起。看看这篇文章:
http://blog.coreycoogan.com/2010/05/24/using-structuremap-to-configure-applications-and-components/
答案 1 :(得分:0)
类似的东西:
Assembly ass = Assembly.GetCallingAssembly();
Container.Configure(x => x.Scan(scan =>
{
scan.Assembly(ass);
scan.LookForRegistries();
}));
然后是Registry类:
public sealed class MyRegistry : Registry
{
...