[英]Clarification needed on registering components in Windsor
根據文檔,我試圖注冊我的所有IRepository實現,以進一步注入到像這樣的控制器中:
container.Register(
Classes.FromThisAssembly()
.BasedOn<IRepository>()
.WithService.Base()
.LifestyleTransient());
具體存儲庫實例的用法很簡單:
public class TheController : Controller
{
private MyConcreteRepository repo;
public TheController (MyConcreteRepository r)
{
repo = r;
}
public ActionResult Index()
{
var ans = repo.GiveMeData<TheDataType>();
...
...
return View();
}
}
並啟動它引發的應用程序
'MyMVCWebSite.Controllers.TheController' is waiting for the following dependencies:
- Service 'MyMVCWebSite.DataUtils.MyConcreteRepository' which was not registered.
存儲庫層次結構看起來像
public interface IRepository : IDisposable
{
...
}
public interface IAlmostConcreteRepository : IRepository
{
DbSet<TEntity> GiveMeData<TEntity>() where TEntity : class;
}
public class MyConcreteRepository : IAlmostConcreteRepository
{
protected DbContext context;
public MyConcreteRepository(DbContext dbc)
{
context = dbc;
}
public DbSet<TEntity> GiveMeData<TEntity>() where TEntity : class
{
return context.Set<TEntity>();
}
...
public void Dispose()
{
...
}
}
因此,都不是一對一地注冊組件
container.Register(
Component.For<IAlmostConcreteRepository>()
.ImplementedBy<MyConcreteRepository>()
.LifestyleTransient());
也不能按照帖子開頭提到的慣例進行操作。 只能注冊具體實例:
container.Register(
Component.For<MyConcreteRepository>()
.LifestyleTransient());
要么
container.Register(
Classes.FromThisAssembly()
.BasedOn(typeof(MyConcreteRepository))
.WithService.Base()
.LifestyleTransient());
我是否錯過了文檔中的某些內容? 請幫忙。
在這里,我使用MyConcreteRepository類代替了接口,所以就是問題所在。
public class TheController : Controller
{
private MyConcreteRepository repo;
public TheController (MyConcreteRepository r)
{
repo = r;
}
}
簡單拼寫錯誤,應為:
public class TheController : Controller
{
private IAlmostConcreteRepository repo;
public TheController (IAlmostConcreteRepository r)
{
repo = r;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.