私は、Entity Framework DbContext型の基本クラスを使用するリポジトリプロジェクト内にいくつかのリポジトリクラスを持っています。Castleウィンザーがベースクラスを作成/公開していない
基本クラス
public class RepositoryBase<TC> : IDisposable
where TC : DbContext, new()
{
public virtual T Get<T>(...) where T : class
{
...
}
// ... additional code
}
従業員のレポインタフェース
namespace Insight.Repository.Interfaces
{
public interface IEmployeeRepository
{
Result CreateEmployee(Employee employee);
// ... additional code
}
}
従業員のレポ
namespace Insight.Repository.Repositories
{
public class EmployeeRepository : RepositoryBase<InsightContext>, IEmployeeRepository
{
public Result CreateEmployee(Employee employee)
{
return Save(employee);
}
}
// ... additional code
}
私が使用してAsp.Mvcウェブサイト内ウィンザーコンテナにレポクラスを追加していリポジトリプロジェクト内のインタフェースに基づくインストーラ。私はこの時点でコンテナを見てきました。私は3つのリポジトリを取得しています。
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("Insight.Repository")
.Where(Component.IsInNamespace("Insight.Repository.Repositories"))
.WithService.DefaultInterfaces()
.LifestyleTransient());
}
次のようにDbContextを登録しようとしましたが、同じ結果が得られました。
container.Register(Component.For<DbContext>()
.ImplementedBy<InsightContext>()
.LifestyleTransient());
その後、私のApiController以内に、私は、レポのクラスをインスタンス化するには、プロパティインジェクションを使用していますが、私は、基本クラスの関数のいずれかにアクセスすることができません。
public class EmployeeController : ApiController
{
public IEmployeeRepository EmployeeRepo { get; set; }
[Route("GetEmployee")]
public void Get()
{
var newEmployeeRepo = new EmployeeRepository();
}
}
EmployeeRepoは、基本クラスのGet()関数にアクセスすることはできませんが、newEmployeeRepoはアクセスしません。
これは、Castle.Windsorを使用した私の最初のプロジェクトです。登録手順のいくつかの種類が明らかに欠けていますが、それを理解することができます。
誰かが私を正しい方向に向けることができれば、非常に感謝しています。
編集:この行のtym32167
void Main()
{
var container = new WindsorContainer();
var type = typeof(II);
container.Register(Classes.FromAssembly(type.Assembly)
.Where(Component.IsInNamespace(type.Namespace))
.WithService.AllInterfaces()
.LifestyleTransient());
var cls = container.Resolve<II>().Dump();
cls.GetFirstName().Dump();
cls.GetLastName().Dump();
}
public interface II
{
string GetFirstName();
}
public class MyClass : II
{
public string GetFirstName()
{
return "First Name";
}
public string GetLastName()
{
return "Last Name";
}
}
コードブレークによって供給Linqpadコードとテスト:
cls.GetLastName().Dump();
が、これは正常な動作ですか?
そんなことを言えば、それははっきりと聞こえます。ありがとう、そのソリューションは魅力的でした。 – Vazmo