Ninject 与 Ria 服务(自定义域服务)

发布于 2024-10-19 09:10:55 字数 499 浏览 4 评论 0原文

我遇到一种情况,我正在访问自定义域服务中的存储库,并且我希望将它们注入。

即,

    [EnableClientAccess()]
    public class UserDomainService : DomainService
    {

    public IUserRepository repo;

    public UserDomainService(IUserRepository userRepo)
        : base()
    {
       repo = userRepo;            
    }

    public IEnumerable<User> GetUsers()
    {
        return this.repo.GetUsers();
    }

我有许多域服务,我不确定在哪里定义 Ninject 模块来保存所有域服务的类型绑定并将其加载到内核中。我正在寻找一个简单的例子来演示我如何做到这一点。

I have a situation where I am accessing repositories within my custom Domain Services and I'd prefer to have them injected.

I.e.

    [EnableClientAccess()]
    public class UserDomainService : DomainService
    {

    public IUserRepository repo;

    public UserDomainService(IUserRepository userRepo)
        : base()
    {
       repo = userRepo;            
    }

    public IEnumerable<User> GetUsers()
    {
        return this.repo.GetUsers();
    }

I have numerous Domain Services and what I'm unsure of is where to define a Ninject module to hold my type bindings for all of my Domain Services and load it into the kernel. I am looking for a simple example to demonstrate how I might do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝咒 2024-10-26 09:10:55

我使用 Ninject.Extensions.Web 进行了正确的跟踪 - 扩展 NinjectHttpApplication 来代替默认的 Global.asax。

但是,它不起作用,因为它没有公开 KernelContainer(访问新定义的 Ninject 模块),这样您就无法像使用它提供的页面基类那样注入自定义域服务。

所以...

我最终创建了一个类似的扩展 HttpApplication 的类,该类公开公开静态内核。然后,我创建了一个基本域服务,我的所有域服务都继承自它。然后,在构造函数中,我进行调用以注入我的域服务实例:

    [EnableClientAccess()]
    public class BaseDomainService : DomainService
    {
        public BaseDomainService()
           : base()
        {
            MyCustomStaticKernelContainer.Inject(this);
        }
    }

I was on the right tracking with Ninject.Extensions.Web - extending the NinjectHttpApplication in place of the default Global.asax.

However, it does not work because it does not expose the KernelContainer (access to your newly defined Ninject module) such that you are not able inject your custom domain service like you would with the page base class it provides.

So...

I ended up created a similar class extending HttpApplication that publicly exposes the static kernel. Then, I created a base domain service that all of my domain services inherit from. Within the constructor, I then make a call to inject my domain service instance:

    [EnableClientAccess()]
    public class BaseDomainService : DomainService
    {
        public BaseDomainService()
           : base()
        {
            MyCustomStaticKernelContainer.Inject(this);
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文