我有下面的類:統一不解析庫
SuppliersRepository.cs(與限定方法的接口):
public class SuppliersRepository : BaseRepository,ISuppliersRepository
{
public IEnumerable<Supplier> GetSuppliersByCoordinates(double latitude, double longitude)
{
using (IDbConnection connection = OpenConnection())
{
const string query = "SELECT ID=SupplierID,Name=Suppliername FROM suppliers WHERE dbo.Distance(@latitude,@longitude,latitude,longitude) < 15 AND latitude IS NOT NULL AND longitude IS NOT NULL";
return connection.Query<Supplier>(query, new { latitude = latitude,longitude=longitude });
}
}
}
BaseRepository.cs(與限定的方法中的接口)
public abstract class BaseRepository: IBaseRepository
{
public IDbConnection OpenConnection()
{
IDbConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnection"].ConnectionString);
connection.Open();
return connection;
}
}
一個Bootstraper.cs從的global.asax.cs調用:
public static class Bootstrapper
{
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<IBaseRepository, BaseRepository>();
container.RegisterType<ISuppliersRepository, SuppliersRepository>();
container.RegisterInstance<IHttpControllerActivator>(new HttpControllerActivator(container));
container.RegisterControllers();
return container;
}
}
而且兩個控制器,第一個解決了倉庫罰款:
public class VenueController : MasterController
{
[Dependency]
public SuppliersRepository _SuppliersRepository { get; set; }
}
但是這一次失敗:
public class AjaxController : Controller
{
[Dependency]
public BaseRepository _BaseRepository { get; set; }
}
它拋出一個System.InvalidOperationException:類型BaseRepository不能被構建。您必須配置容器以提供此值。
任何想法我做錯了什麼?
最好使用構造函數注入而不是屬性注入。這樣你就不必用'[Dependency]'屬性修飾你的屬性,並且防止你的應用程序代碼依賴於Unity。 – Steven 2012-04-05 13:48:45