小编Mik*_*ley的帖子

Quartz.NET,NH ISession和Ninject Scope

我正在尝试实现一个基于Quartz.Net运行作业的服务.作业可能具有IRepository <>等依赖项,并且存储库实现将注入NHibernate ISession.(Quartz将托管在Windows服务中).通过使用Ninject解析的IJob工厂实现来解析作业(当前包含在IServiceLocator实现中).

工作范围

我希望能够使用Ninject来定位每个作业的ISession,以便每个作业创建一个可以在多个IRepository <>中使用的会话.

不确定这是否可行,但我想知道是否有人有这方面的经验?

我可以以某种方式使用作业上下文来创建Kernel.InScope(???)使用的作用域.

Quartz.Net IJobFactory:

public class JobFactory : IJobFactory
{
    readonly IServiceLocator locator;

    public JobFactory(IServiceLocator locator)
     {
         this.locator = locator;
     }

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        try
        {               
            var jobDetail = bundle.JobDetail;
            var jobType = jobDetail.JobType;

            return (IJob)locator.Resolve(jobType);
        }
        catch (Exception e)
        {
            var se = new SchedulerException("Problem instantiating class", e);
            throw se;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ninject绑定:

        //Service Locator
        Bind<IServiceLocator>().To<NinjectAdapter>();

        //Quartz Bindings
        Bind<IJobFactory>().To<JobFactory>();

        //NHibernate Bindings
        Bind<ISessionFactory>().ToMethod(ctx => ctx.Kernel.Get<NHibernateConfiguration>().BuildSessionFactory()).InSingletonScope();
        Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<ISessionFactory>().OpenSession());// ToDo: …
Run Code Online (Sandbox Code Playgroud)

nhibernate scope ninject quartz.net

5
推荐指数
1
解决办法
1993
查看次数

ASP.NET WebAPI支持每种方法的媒体类型

给定控制器中的方法:

public class CustomerController : ApiController
{
    [HttpGet]
    public CustomerDto GetById([FromUri] int id)
    {
        .
        .
        return customerDto
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用属性指定支持的媒体类型?例如,CustomerDto是一个复杂的类,只能使用JSON(application/json)而不是XML(application/xml)进行序列化,但也可以接受PDF(application/pdf).有这样的事情:

[HttpGet(Accepts.JSON, Accepts.PDF)]  
    or
[HttpGet][AcceptJSON][AcceptXML]
    or
[HttpGet][Accept("application/json")][Accept("application/pdf")]
Run Code Online (Sandbox Code Playgroud)

如果不支持传入请求,则可能会返回不支持的异常/状态.

注意 - 我不想全部删除说XML序列化,因为全局可以完成.相反,我想定义每条路线接受的内容.

使用 - ASP.NET WebAPI RC 1(需要升级)+自托管

media-type asp.net-web-api asp.net-web-api-routing

5
推荐指数
1
解决办法
1765
查看次数

MassTransit - 将消息更新到客户端

我没有很多使用MSMQ的经验,有人建议我看看MassTransit来帮助实现解决方案,但我很难弄清楚使用MassTransit + MSMQ是否适合这项工作.

我们有一个由多个用户使用的WPF应用程序(3.5).持久性是从应用程序(通过NHibernate)到数据库完成的.到目前为止,用户会定期刷新视图,以确保他们拥有最新的更新.但是,我们现在希望在使用发布/订阅消息传递持久化实体时向每个应用程序实例发送通知.客户端应用程序都在同一个域中运行,并且应该能够满足大多数所需的依赖关系(例如,在客户端计算机上安装MSMQ).

总结一下:Client1发布更新消息---> ????? ---->所有其他活动客户端都会收到它.

由于我是MSMQ的新手,我甚至不确定架构应该是什么样子.

  • 每个客户端计算机是否需要具有本地MSMQ队列来接收消息?
  • 我们只需要在服务器上创建一个队列,所有客户端都在那里监听消息吗?如果是这样,只是一个队列就足够了,还是我们需要创建一个服务才能正确分发消息?
  • 这甚至是工作的正确工具吗?

我创建了一个小POC希望它可以工作,但我最终得到了我认为被称为"竞争消费者"的东西.我想要发生的是一个应用程序实例发送消息,所有应用程序实例都接收它.

任何建议,方向或建议将不胜感激!

这是POC视图模型代码(注意 - 在我看来,localhost将替换为每个应用程序实例将发送消息的服务器):

更新:添加网络密钥(小猫)

更新:我上传了示例代码 https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0ByDMJXKmYB7zMjBmYzYwNDEtYzMwOC00Y2RhLTk1MDYtZjc0NTI2M2E3Y2Qy&hl=zh_CN

public class MainViewModel : IDisposable, INotifyPropertyChanged 
{
    private Guid id;

    public MainViewModel()
    {
        id = Guid.NewGuid();
        Publish = new RelayCommand(x => OnExecutePublishCommand(), x => !string.IsNullOrEmpty(Message));
        Messages = new ObservableCollection<MessagePayload>();

        Bus.Initialize(sbc =>
        {
            sbc.UseMsmq();
            sbc.SetNetwork("Kittens");
            sbc.VerifyMsmqConfiguration();
            sbc.UseMulticastSubscriptionClient();
            sbc.ReceiveFrom(string.Format("msmq://localhost/{0}", ConfigurationManager.AppSettings["queue"]));
            sbc.Subscribe(subs => subs.Handler<MessagePayload>(OnReceiveMessage));
        });
    }

    public ICommand Publish { get; private set; }

    private string message;
    public string Message
    {
        get { return …
Run Code Online (Sandbox Code Playgroud)

c# wpf msmq masstransit

4
推荐指数
1
解决办法
2016
查看次数

项目和此[] - 已声明具有相同名称的成员

可能重复:
具有索引器的类和名为"Item"的属性

刚刚遇到过我以前从未见过的东西,并想知道为什么会发生这种情况?

使用下面的类,我得到编译器错误"已经声明了具有相同名称的成员",关于"Item"和"this [...]".

public class SomeClass : IDataErrorInfo 
{
    public int Item { get; set; }

    public string this[string propertyName]
    {
        get
        {
            if (propertyName == "Item" && Item <= 0)
            {
                return "Item must be greater than 0";
            }
            return null;
        }
    }

    public string Error
    {
        get { return null; }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器似乎认为这个[...]和Item使用相同的成员名称.这是正确/正常吗?我很惊讶我之前没遇到过这个.

.net c# compiler-errors indexer

1
推荐指数
2
解决办法
1847
查看次数