如何将结构图用于通用存储库模式
本文关键字:存储 模式 用于 结构图 | 更新日期: 2023-09-27 17:59:32
使用以下通用存储库。
public interface IRepository<T> where T: class
{
void Commit();
void Delete(T item);
IQueryable<T> Find();
IList<T> FindAll();
void Add(T item);
}
如何对结构图进行编码以使用它?我使用Structuremap v2.6.1进行.net 3.5
public static void BootstrapStructureMap()
{
ObjectFactory.Initialize(x =>
{
// This is giving me problems!
x.For<IRepository<Employee>>().Use<IRepository<Employee>>();
});
}
我得到以下错误:
StructureMap异常代码202没有为插件系列定义默认实例
使用For().Use()
构造,当有人请求For
中的类型时,您可以告诉StructureMap实例化Use
中给定的类型。因此,通常情况下,您为For
提供一个接口或抽象基类,因为您是针对抽象进行编程的。
这里的问题是,您将一个抽象类型(您的IRepository<T>
)传递到了Use
方法中。StructureMap将无法创建该接口的新实例。您需要创建IRepository<T>
(例如EntityFrameworkRepository<T>
)的通用实现并注册它。示例:
x.For<IRepository<Employee>>().Use<EntityFrameworkRepository<Employee>>();
然而,这很快就会导致大量注册,因为您将有十几个想要使用的存储库。因此,您可以使用开放泛型类型将其减少为一次注册,而不是为您想要使用的每个封闭泛型存储库进行多次注册,如下所示:
x.For(typeof(IRepository<>)).Use(typeof(EntityFrameworkRepository<>)));